0

Для приложения управления заказами мне нужно разработать API RESTful, который работает с JSON.Дизайн REST JSON API

я предпочел бы мои API-интерфейсы, как это, в результате чего запрос/ответ содержит JSON:

Заказать API поиска

API: /orders/search 
      { 
       custname: "john", 
       orderdate: "10-jun-2013" 
      } 
    Response: 
      { 
      orders:[ 
       { 
       orderid:234234, 
       orderstatus: NEW, 
       customer: "john" 
       } 
      ] 
      } 

Порядок обновления API

API: /orders/343455   
Request Body: 
    { 
      orderstatus: "DELIVERED", 
      recepient: "joe"   
    } 
Response: 
    { 
     status: ERROR, 
     message: "Order does not exist" 
    } 

Вопрос:
1. Как я могу отправить JSON в запрос GET (как в API поиска заказов).
2. Я даже собираюсь сделать каждый запрос POST-запроса с запросом JSON в теле, предлагая, что это за операция, - но тогда это все равно будет REST (возможно, «RESTful Web-Service» или «REST like Service») ?
3. Я думаю, что для меня очень важно отправить JSON в большинстве запросов, таким образом, мои реализации API не претерпевают больших изменений, просто я добавил удаленные атрибуты сообщения JSON.
4. Есть ли примеры того, как это сделали другие люди, особенно возвращая сообщения об ошибках.

Любые мысли?

ответ

0

1) Как я могу отправить JSON в запрос GET (как в API поиска заказов).

Насколько я знаю, HTTP 1.1 НЕ запрещает явным образом тело запроса для метода GET.

Однако мнения о том, рекомендуется ли это, отличаются.

Запрос GET должен (должен) быть idempotent, однако - особенно в контексте REST и для обеспечения кеширования.

См. Также этот вопрос на SO HTTP GET with request body и многие другие.

Если вы не можете указать тело запроса в методе GET, по какой-либо причине вам нужно включить параметры в URL-запрос - правильно закодированный (что является болью).

2) Я даже думал сделать каждый запрос запрос POST

Я бы не сделать это. Структуры веб-служб ожидают, что определенные типы запросов будут выполняться с помощью соответствующего метода HTTP. Это против REST, например, запрос POST, который будет фактически GET, не будет кэшироваться. Это против HTTP тоже.

Смежные вопросы