Предпочитаемый метод для URL в стиле REST? - PullRequest
4 голосов
/ 16 сентября 2011

Я создаю веб-приложение, которое включает службы в стиле REST, и я хотел бы получить некоторые пояснения относительно предпочтительного (стандартного) метода того, как запросы POST должны приниматься моей стороной на сервере Java:

Способ 1: http://localhost:8080/services/processser/uid/{uidvalue}/eid/{eidvalue}

Способ 2: http://localhost:8080/services/processuser {uid: "", eid: ""} - это будет отправлено как JSON в теле сообщения

Оба метода будут использовать тип контента "application / json", но у каждого метода есть свои преимущества и недостатки. Я сразу могу подумать об одном недостатке метода 2, который заключается в том, что данные JSON необходимо сопоставлять с объектом Java, создавая таким образом объект Java каждый раз, когда любой пользователь обращается к API-сервлету «processuser». Ваш вклад очень важен.

В этом конкретном случае данные будут использоваться для запроса базы данных, чтобы вернуть клиенту ответ json.

Ответы [ 2 ]

6 голосов
/ 16 сентября 2011

Я думаю, нам нужно немного вернуться от вашего вопроса. Ваш сегмент пути начинается с:

/services/processuser

Это ошибка. URI должен идентифицировать ресурс, а не операцию. Это не всегда возможно, но к этому нужно стремиться.

В этом случае вы, похоже, идентифицируете своего пользователя с uid и eid (какими бы они ни были). Вы можете построить пути, например, если на пользователя ссылаются /user/<uid>/<eid>, /user/<uid>-<eid> (если необходимо /user/uid/<uid>/eid/<eid>); если eid является специализацией, а не наравне с uid, тогда /user/<uid>;eid=<eid> будет более подходящим.

Вы бы создали новых пользователей, отправив на /user/ или /user/<uid>/<eid>, если вы знали идентификаторы заранее, удалив пользователей с помощью DELETE на /user/<uid>/<eid> и , измените состояние , используя PUT на /user/<uid>/<eid>.

Таким образом, чтобы ответить на ваш вопрос, вы должны использовать PUT на /user/<uid>/<eid>, если «processuser» стремится изменить состояние пользователя с данными, которые вы предоставляете. В противном случае сопоставление с моделью REST не такое чистое, возможно, лучшим вариантом будет определить ресурс /user/process/<uid>/<eid> и POST там со всеми данными, но POST к /user/process со всеми данными будет более или менее то же самое, поскольку мы уже в лагере, подобном RPC.

0 голосов
/ 16 сентября 2011

Для запросов POST обычно предпочтителен метод 2, хотя часто имя ресурса будет множественным, так что вы действительно отправляете по адресу:

http://localhost:8080/services/processusers

Однако для создания новых записей.

Похоже, вы действительно используете то, для чего большинство сервисов RESTful будет использовать запрос GET (извлечение записи), и в этом случае предпочтителен метод 1.

Edit: Я понимаю, что не получил свой ответ, поэтому рассмотрим стандарты, установленные Rails . Вы можете соглашаться или не соглашаться с тем, что это действительный стандарт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...