У вас есть несколько способов передачи метаданных в RESTful API:
- Http Status Code
- Заголовки
- Тело ответа
Для metadata.status используйте Http Status Code, вот для чего!
Если метаданные относятся ко всему ответу, вы можете добавить его в качестве полей заголовка.
Если метаданные относятся только к части ответа, вам придется встраивать метаданные как часть объекта. НЕ оборачивать весь ответ в искусственный конверт и разбивать оболочку на данные и метаданные.
И, наконец, соответствует вашему API с выбором, который вы делаете.
Хороший пример - GET для всей коллекции с нумерацией страниц. GET / предметы
Вы можете вернуть размер коллекции и текущую страницу в пользовательских заголовках. И нумерация ссылок в стандартном заголовке ссылки:
Link: <https://api.mydomain.com/v1/items?limit=25&offset=25>; rel=next
Проблема этого подхода заключается в том, что вам нужно добавить метаданные, ссылающиеся на определенные элементы в ответе. В этом случае просто вставьте его в сам объект. И иметь последовательный подход ... всегда добавлять все метаданные в ответ. Итак, возвращаясь к GET / items, представьте, что каждый элемент создал и обновил метаданные:
{
items:[
{
"id":"w67e87898dnkwu4752igd",
"message" : "some content",
"_created": "2014-02-14T10:07:39.574Z",
"_updated": "2014-02-14T10:07:39.574Z"
},
......
{
"id":"asjdfiu3748hiuqdh",
"message" : "some other content",
"_created": "2014-02-14T10:07:39.574Z",
"_updated": "2014-02-14T10:07:39.574Z"
}
],
"_total" :133,
"_links" :[
{
"next" :{
href : "https://api.mydomain.com/v1/items?limit=25&offset=25"
}
]
}
Обратите внимание, что ответ коллекции - это особый случай. Если вы добавляете метаданные в коллекцию, коллекция больше не может быть возвращена в виде массива, это должен быть объект с массивом в нем. Почему объект? потому что вы хотите добавить некоторые атрибуты метаданных.
Сравните с метаданными в отдельных элементах. Ничего похожего на завертывание сущности. Вы просто добавляете некоторые атрибуты к ресурсу.
Одно из соглашений заключается в разграничении полей управления или метаданных. Вы можете добавить к этим полям знак подчеркивания.