Ресурсы в APIRestful - PullRequest
       23

Ресурсы в APIRestful

0 голосов
/ 14 мая 2018

Я прочитал несколько вещей об API, но есть кое-что, что мне не совсем понятно по вопросу о том, как структурировать resources. Я приведу простой, но наглядный пример. Мы представляем, что имеем такие отношения:

|Clients| (1:1) ------<>----- (0:M) |Orders| (1:1) ------<>------ (1:1) |Statuses|

У клиента может быть ноль или много заказов, и каждый заказ имеет статус.

Вопрос возникает при создании ресурсов, ресурсы, которые ясны, таковы:

GET /clients (get a list)
GET /clients/10 (get detail of one client)
POST /clients (create a client passing data by BODY)

(может быть больше, как PUT, но для упрощения я упрощаю пример.)

Вопрос в том, чтобы получить Заказы от Клиента , например resource?

GET /clientes/10/orders

или на месте:

GET /orders?id_cliente=10

То же самое, чтобы получить детали Заказа , на что это было бы похоже?

GET /clientes/10/orders/10

Или было бы просто разумно сделать это (что также показало бы информацию о состоянии , которое у вас есть):

GET /orders/10

Или когда вы хотите удалить заказ:

DELETE /orders/10

или

DELETE /clientes/10/orders/10

И для создания Заказа , если Заказчик всегда существует или могут быть одновременно созданы Заказ и Заказчик время со следующим ресурсом? Например, Клиент , не зарегистрированный при совершении покупки, разместит Заказ и зарегистрируется одновременно)

POST /orders 

Передача данных Customer в BODY в качестве данных Order . Сначала будет создан Клиент , а затем Заказ .

Если есть кто-нибудь, кто знает, как будут выглядеть все действительные ресурсы примера отношений, было бы хорошо поделиться ими. Я не хочу вдаваться в темы разбивки на страницы или другие темы, которые также важны в API. Только в отношении ресурсов.

1 Ответ

0 голосов
/ 14 мая 2018

Чтобы устранить путаницу, вы можете просто задать себе следующие вопросы.

  1. Имеет ли мой ресурс уникальный идентификатор ресурса?- Не должно быть нескольких элементов ресурса, указывающих на один и тот же ресурс.
  2. Может ли дочерний ресурс существовать без родителя?- Если он может существовать, то он не должен рассматриваться как дочерний ресурс, а должен рассматриваться как отдельный ресурс.

В вашем случае, согласно вышесказанному, ясно, что *Ресурс 1009 * клиентов является родителем ресурса orders .Таким образом, конечные точки API должны быть

/clients (GET) - get all clients
/clients/$client_id (GET) - get a client
/clients/$client_id/orders (GET) - get all orders of the particular client
/clients/$client_id/orders (POST) - create new order for the client
/clients/$client_id/orders/$order_id (PUT) - Modify the particular order for the client
/clients/$client_id/orders/$order_id (DELETE) - Delete the particular order for the client

И последний вопрос о создании родительского ресурса, когда дочерний ресурс создает API, называется: мой ответ

Примечание.: Сортировка, фильтрация, ограничения и разбиение на страницы могут поддерживаться с помощью параметров запроса в ваших API.

...