@PragmaticProgrammer

Как грамотнее в рамках REST-api отдавать сущности SQL базы данных со связями?

Я пишу приложение для доставки еды.

На стороне сервера имеется таблица заказов - Orders такого вида:

CREATE TABLE orders(  
  id            INTEGER PRIMARY KEY,  
  created_time  DATETIME
);


...и таблица OrderStatuses, в которой храним лог о статусах заказа:

CREATE TABLE order_statuses(  
  id            INTEGER PRIMARY KEY,  
  created_time  DATETIME,
  status_code   INTEGER,
  order_id      INTEGER,
  FOREIGN KEY(order_id) REFERENCES orders(id)       
);


...т.е. статусы ссылаются на заказы по внешнему ключу.

Следуя REST, мы могли бы сделать для получения этих сущностей такие пути:

/orders - для заказов

/orders/{order_id}/statuses  - для статусов конкретного заказа


Вопрос: грамотно ли будет по запросу /orders отдавать заказы вместе с их статусами (при помощи JOIN в SQL)?

Или же лучше на стороне клиента дёргать два запроса с последующим слиянием данных в коде клиента ?
  • Вопрос задан
  • 665 просмотров
Решения вопроса 1
DevMan
@DevMan
rest - размытая штука, в ней нет высеченных в граните правил.
если вам нужен статус в ордере, то и отдавайте его вместе с ордером.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
dmitriylanets
@dmitriylanets
веб-разработчик
https://fractal.thephpleague.com
позволяет делать include связанных сущностей например
/orders?include=client

но как правило это делается для связей один к одному, многие к одному
для связи один ко многим, обычно делаю /orders/{order_id}/statuses
если statuses жестко зависит от order не существует без него.
Ответ написан
Комментировать
inoise
@inoise
Solution Architect, AWS Certified, Serverless
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Можно делать JOIN с пагинацией (пакетный запрос).
Например, "вернуть список заказов и статусы для X-записей заказов в количестве N".
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы