2016-02-04 9 views
0

Предположим, что я снимаю для API, совместимого с HATEOAS. Я предоставляю конечную точку /cars/{id}. Если пользователь был назвать GET /cars/12, они увидели бы что-то вроде:Обновление HATEOAS rels

{ 
    "color": "Red", 
    [...], 
    "links": [ 
     { "rel": "driver", "href": "/people/123" }, 
     { "rel": "owner", "href": "/people/456" }, 
    ] 
} 

В этой модели, как обновить отношения? Например, говорят, что автомобиль продается до /people/42. Изменяет ли значение PUT значение ownerhref?

ответ

1

Есть много возможностей для этого. Этот API не должен быть один-к-одному представление данных, так и с, что она ум:

  • Вы можете изменить ресурс с помощью PUT, даже ссылки, если вы хотите
  • Вы можете выставить отдельный " владелец»ресурс для автомобиля, и PUT нового владельца там
  • Вы могли разоблачить„принадлежат автомобилям“ресурс от людей, и POST к той коллекции, которая заставляет автомобиль сменить владелец

Это зависит от того, как система распределяется, она может быть, что не все ресурсы находятся под вашим контролем. Люди могут быть объединенными ссылками на сторонние ресурсы, и в этом случае они могут не иметь ссылок на вашу систему и т. Д.

Если все под вашим контролем, возможны все варианты.

1

Ваш запрос PUT может содержать снова links. Я полагаю, что тело запроса PUT должно быть примерно идентично тому, что вы получили от GET, но с обновленным владельцем.

0

В сервере HATEOAS необходимо предоставить ссылки через некоторый формат гиперссылки (HAL, ...). Клиент не должен создавать, обновлять или удалять эти ссылки напрямую. У вас должен быть владелец собственности и драйвер, и клиент может обновлять эти свойства, но не ссылки на детали для владельца или драйвера. Эти ссылки на детали для владельца и драйвера должны генерировать сервер, а не клиент. Сервер может изменять URL-адреса для ресурса с течением времени.