Подтвердить что ты не робот

Как я должен обрабатывать ссылки и ссылки HATEOAS в JSON?

Я занимаюсь разработкой REST api и получаю как RESTful. Я хочу включить HATEOAS в ответы json.

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

Несколько статей, которые я нашел, используют структуру, заимствованную из ATOM feeds:

"links": [ 
    {"rel": "self", "href":"http://example.org/entity/1"},
    {"rel": "friends", "href":"http://example.org/entity/1/friends"}, ... 
]

Это вызвало ряд вопросов:

  • Зачем использовать массив в качестве контейнера?. По словам разработчика javascript, которого я знаю, доступ к ссылкам будет проще с помощью ссылок как свойств объекта. Например:

    "self":    { "href":"http://example.org/entity/1" }, /* (facebook uses this) */  
    "friends": { "href":"http://example.org/entity/1/friends", "type": "..."}
    
  • Существует ли общая структура json (помимо адаптации атома снова) для описания ссылок в свойствах ресурса? (например, отправитель сообщения).

    Ссылка, вероятно, должна быть снова решена как URL-адрес, но было бы неплохо включить простой идентификатор? вроде как:

    "sender": { 
        "id": 12345,
        "href": "resource-uri"
    }
    

Мой образ мыслей заключается в том, что, хотя HATEOAS делает это так, что клиенту не нужно много знаний для использования API, я вроде бы неохотно удаляю возможность использовать эти знания (например, получить доступ к профилю создавая ссылку на стороне клиента, не глядя сначала на пользователя).

4b9b3361

Ответ 1

Я перезапустил этот раздел в группе google API и получил отличные ответы.

Основными преимуществами конструкции массива являются:

  • несколько ссылок для одного и того же отношения
  • множественные отношения для одной и той же ссылки без записи ссылки aggain
  • возможность заказа ссылок

Карта причины имеет лучшую доступность.

Что касается структуры, то есть много возможностей:

Думаю, я поеду с HAL, поскольку это самое чистое решение, остальные все выглядят как... странные для json.

Ответ 3

Я думаю, что это так, что вы можете предлагать несколько ссылок на основе метода http.

например.

"links": [ 
    {"rel": "sender", "method":"post", "href":"http://example.org/entity/1"},
    {"rel": "sender", "method":"put", "href":"http://example.org/entity/1"}, ... 
]

возможно, вы могли бы адаптировать это к своей идее

"sender": { 
     "href":"http://example.org/entity/1",
     "methods": ["put","post"]
}