У меня есть этот вопрос, который некоторое время проходит вокруг моей головы. Предположим, что мы структурировали наш проект с бэкэнд и интерфейсом на отдельных уровнях. Таким образом, во внешнем интерфейсе, мы хотим получить костюмер, который поставляется в формате hal+json
:Как следует обращаться с Hateoas из интерфейса?
GET /customers/1 HTTP/1.1
Accept: application/hal+json
{
"name": "Alice",
"links": [ {
"rel": "self",
"href": "http://localhost:8080/customer/1"
} {
"rel": "transactions",
"href": "http://localhost:8080/customer/1/transactions"
}]
}
Затем из интерфейса я хочу, чтобы все операции с клиентами. Мой вопрос: как мне получить URL? должно ли оно быть от ответа? или я должен строить его внутренне?
Если мы идем с первым вариантом, я думаю, что, возможно, это было бы не изящно, если бы итерации всех ссылок до тех пор, пока мы не получим тот, который нам нужен. Кроме того, может произойти ситуация, когда у нас нет ссылки на запрос, который мы хотим сделать.
если мы идем со вторым вариантом, я не понимаю, как построить этот URL-адрес, если у нас на самом деле нет идентификаторов. Как я могу создавать новые транзакции с клиентами, если renoas заменяет идентификаторы ссылками, и я больше не получил ссылку на объект в теле?
Я думал, что, возможно, сервис должен поддерживать как application/hal+json
(ориентированный на пользователей), так и application/json
(ориентированный на клиентов), но я не вижу, что так оно и делается в целом.
Как вы думаете?
Что в случае, если у меня есть идентификатор пользователя, который я хочу, чтобы добавить власть? Тогда мне нужно будет сделать запрос GET/пользователям, чтобы получить ссылку от указанных пользователей. Это было бы нормально? Я делаю 2 запроса вместо одного. Спасибо за ваш ответ! – jscherman
вы не должны иметь идентификатор из внешней системы. у вас должен быть URL-адрес. И да, это 2 запроса ... если сервер не достаточно умен, чтобы знать ваши намерения. то, например, он может вставить транзакционное отношение для вас. Один из способов дать вам это намерение - определить потребитель-клиент с заголовком. Но не волнуйтесь слишком много о двух запросах, это очень маленькая цена для оплаты. СЕЙЧАС, если вы являетесь внутренним ... почему вы используете HTTP-api в любом случае? просто перейдите в БД/систему или запись и получите нужные данные. –
Думаю, у меня есть точка. Благодаря! – jscherman