Страницы

Поиск по вопросам

четверг, 11 июля 2019 г.

ASP.NET WebApi и связаны ресурсы

Доброго времени суток.
Нужна ваша помощь. Есть ASP.NET WebApi приложение в котором нужно представить связь двух ресурсов. Например есть сущность StreetType которая возвращает json:
{ "id":3, "name":"StreetType1", }
и сущность Street
{ "id":1, "name":"Street1", "streettypeid":3 }
Ранее для получения связанных ресурсов использовал OData запрос: http://localhost:3761/api/Street?$expand=StreetType
Но, так как в некоторых сущностей может быть 3 и более связанных ресурсы то писать такие запросы будет сложно ну и не очень красиво.
Было бы неплохо реализовать это следующим образом:
http://localhost:3761/api/Street/ - все Street http://localhost:3761/api/full/Street/ - все Street и связанные ресурсы (в этом случае только StreetType) http://localhost:3761/api/Street/1 - Street с ID = 1 http://localhost:3761/api/full/Street/1 - Street с ID = 1 и связанные ресурсы
Но есть проблема с системой маршрутизации и наследованием атрибутов. Так как все это должно быть реализовано в базовом классе.
Вопрос: Как правильно реализовать представление связанных объектов? Как оформить простой URL например для такого запроса OData: http://localhost:3761/api/City?$expand=CityType,Region


Ответ

Есть небольшая книга по проектированию API интерфейсов автора Brian Mulloy, называется Web API Design Crafting Interfaces that Developers Love. В ней приводятся примеры, как вашу проблему решали крупные корпорации, в частности
Facebook: /joe.smith/friends?fields=id,name,picture Google: ?fields=title,media:group(media:thumbnail) LinkedIn: /people:(id,first-name,last-name,industry)
Можно так же разделять поля сущности на обязательные и дополнительные, где обязательные выгружать всегда, а дополнительные по запросу.
В целом, запрос http://localhost:3761/api/City?$expand=CityType,Region выглядит неправильно, т.к. вы сцепляете разные сущности. Логичнее получать Region отдельным запросом.

Комментариев нет:

Отправить комментарий