REST hypermedia/ ссылки на коллекции
Частью лучшей практики REST является использование ссылок в ответах, чтобы позволить клиентам переходить от одного объекта к другому.
Например, если у меня был тип объекта customer, который имеет дочернюю учетную запись. Если бы я был запросить клиента с помощью /customers/1
тогда я мог бы предоставить следующий ответ
{
"self": "http://localhost:43002/rest/v1/customers/1",
"id": 1,
"name": "Isabella Button",
"number": "000001",
"forename": "Isabella",
"surname": "Button",
"accounts": [
{
"self": "http://localhost:43002/rest/v1/accounts/1",
"id": 1,
"name": "Main Account",
"number": "000001",
"currency": "GBP",
"fromDate": "2013-01-01",
"toDate": "9999-01-01",
"createdDttm": "2013-01-01T00:00:00.000"
}
]
}
Обратите внимание self
свойство содержит ссылки.
Однако, допустим, я не хотел возвращать учетные записи в запросе клиента, возможно, число учетных записей может быть очень большим, поэтому я не хочу возвращать их по умолчанию.
{
"self": "http://localhost:43002/rest/v1/customers/1",
"id": 1,
"name": "Isabella Button",
"number": "000001",
"forename": "Isabella",
"surname": "Button"
}
URL ресурса для учетных записей клиента может быть /customers/1/accounts
Однако, с учетом ответа клиента выше, клиент не сможет обнаружить /customers/1/accounts
ссылка на сайт.
Есть ли лучший способ предоставления гиперссылок в ответе, которые указывают на "дочерние" коллекции возвращаемого ресурса?
2 ответа
Предоставить атрибут ссылки, как в этом примере http://caines.ca/blog/programming/json-is-under-defined-for-rest/
{
"links": {
"self" : { "href": "{id}" },
"up" : { "href": "{upId}" },
"children" : { "href": "{id}/children" }
}
}
Одна из практик заключается в использовании links
элемент как это:
{
"self": "http://localhost:43002/rest/v1/customers/1",
"id": 1,
"name": "Isabella Button",
"number": "000001",
"forename": "Isabella",
"surname": "Button",
"links" : [
{
"rel" : "http://www.yourapi.com/rels/accounts",
"href" : "http://localhost:43002/rest/v1/customers/1/accounts"
},
{
"rel" : "http://www.yourapi.com/rels/someOtherCollection",
"href" : "http://localhost:43002/rest/v1/customers/1/someOtherCollection",
}
]
}
Или, если вам проще создать / прочитать ответ, вы можете поместить те же ссылки, что и в заголовках Link http.