JSON-LD с HYDRA: как определить пользовательскую операцию и указать ее URL?

У меня есть ресурс, доступный по адресу somebaseurl/myresource/id123. Этот ресурс, конечно, имеет некоторые свойства, некоторые ссылки на другие ресурсы, но он также поддерживает некоторые поддерживаемые операции. Все идет нормально. Пока эти операции соответствуют HTTP-глаголам, выполняемым с URL-адресом ресурса в somebaseurl/myresource/id123, все в порядке. Но что, если бы я определил какое-то специальное действие, доступное по запросу POST на somebaseurl/myresource/id123/somespecialaction? Как я могу представить это в ресурсе? JSON-LD+Hydra не поддерживает действия, Hydra поддерживает операции, но я не могу указать свойство «конечная точка» или «URL» для операции в ресурсе. Поэтому я ограничен операциями, доступными через somebaseurl/myresource/id123 (все HTTP-глаголы, ничего больше). Как я могу оставить эти границы в пределах представления ресурса?

{
  "@context":"https://contexts.dictionary.mycompany-group.com/person.jsonld",
  "@id":"https://myapi.mycompany.com/persons/BE14A7269802498F992813885546D058",
  "@type":"https://schema.org/Person",
  "name": "Mustermann",
  "operation"
    : [
      {"@type": "DeleteResourceOperation","method": "DELETE"},
      {"@type": "ReplaceResourceOperation","method": "PUT"}
      ],
    // now how would one specify this with JSON-LD augmented by HYDRA?

    {"@type": "some_special_operation","method": "POST", URL:"https://myapi.mycompany.com/persons/BE14A7269802498F992813885546D058/some_special_operation"}
}

person Johnny Realmony    schedule 13.12.2016    source источник


Ответы (1)


Я ищу способ указать операцию для конкретного экземпляра ресурса: URL-адрес операции и метод HTTP должны быть указаны. Пример (пожалуйста, проверьте последние 3 строки):

{

"@context":"https://contexts.dictionary.mycompany-group.com/person.jsonld",

"@id":"https://myapi.mycompany.com/persons/BE14A7269802498F992813885546D058" , "@type":"https://schema.org/Person", "name": "Mustermann ", "операция": [ {"@type": "DeleteResourceOperation","method": "DELETE"}, {"@type": "ReplaceResourceOperation","method": "PUT"} ],

// как теперь указать это с помощью JSON-LD, дополненного HYDRA?

Вам нужно сослаться на другую «some_special_operation» из узла выше или создать новый узел верхнего уровня с этой операцией.

{ "@type": "some_special_operation", "method": "POST",

URL:"https://myapi.mycompany.com/persons/BE14A7269802498F992813885546D058/so me_special_operation" } }

Так что либо

  BE14A7269802498F992813885546D058
    - operation: delete + put

  5546D058/some_special_operation
    - operation: post

or

  BE14A7269802498F992813885546D058
    - operation: delete + put
    - relationshipProperty:
      ... 5546D058/some_special_operation
         - operation: post

где вы бы выбрали какое-то свойство для «relationshipProperty», которое описывает отношения между двумя ресурсами.

При этом мы в настоящее время пытаемся упростить это, см. https://github.com/HydraCG/Specifications/issues/3

person Markus Lanthaler    schedule 22.12.2016
comment
Спасибо - я не могу проголосовать за ваш вопрос из-за того, что сообщество стека * оценивает меня как начинающего ;)) - person Johnny Realmony; 09.02.2017