Доброго времени суток.
Нужна ваша помощь. Есть 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 отдельным запросом.
Комментариев нет:
Отправить комментарий