Как получить доступ к одному элементу коллекции REST по ссылкам HATEOAS? - PullRequest
0 голосов
/ 10 ноября 2018

Я пытаюсь построить архитектуру сервисов RESTful и сервис шлюза для всех них с помощью Java Spring.Чтобы сделать последнее, мне нужно реализовать клиент для других сервисов, которые я и мои коллеги пытались спроектировать вокруг принципа HATEOAS, предоставляя ссылки на связанные ресурсы через модуль spring-hateoas.

Давайтескажем, у меня есть служба, работающая на локальном хосте, прослушивающая порт 8080, которая возвращает набор ресурсов с операцией GET на /resources.Например:

{
  "_embedded" : {
    "resources" : [ {
      "label" : "My first resource!",
      "resourceId" : 3,
      "_links" : {
        "self" : {
          "href" : "http://localhost:8080/resources/3"
        },
        "meals" : {
          "href" : "http://localhost:8080/resources",
          "templated" : true
        }
      }
    }, {
      "label" : "Another resource!",
      "resourceId" : 4,
      "_links" : {
        "self" : {
          "href" : "http://localhost:8080/resources/4"
        },
        "meals" : {
          "href" : "http://localhost:8080/resources",
          "templated" : true
        }
      }
    } ]
  },
  "_links" : {
    "self" : {
      "href" : "http://localhost:8080/resources",
      "templated" : true
    }
  }
}

Я пытаюсь использовать клиент HATEOAS, такой как Traverson.Как я могу следить за элементом ресурса, просто переходя по ссылкам HATEOAS?До сих пор я решил добавить в мою коллекцию ссылку на item, такую ​​как:

"_links" : {
    "self" : {
      "href" : "http://localhost:8080/resources",
      "templated" : true
    },
    "item" : {
      "href" : "http://localhost:8080/resources/{id}",
      "templated" : true
    }
}

Итак, я могу заменить идентификатор непосредственно в шаблоне на Traverson и следить за результатом.Но это хорошая практика?Должен ли я пойти другим путем?

1 Ответ

0 голосов
/ 27 ноября 2018

Проще говоря, Traverson предназначен для поиска ссылки.

В простейших случаях каждая ссылка имеет уникальное имя (rel).Просто предоставив имя rel для функции follow(...) Траверсона, он будет использовать правильный LinkDiscoverer и перейдет к соответствующему URI этого rel.

. Это Hop.

Поскольку цель состоит в том, чтобы перемещаться по API, например, по следующим ссылкам на веб-странице, вы должны определить цепочку прыжков.

В вашем случае это немного сложнее, так как у вас естьвстроенный с несколькими элементами.Запрашивать ссылку self не так просто, поскольку в корневом документе вы легко можете увидеть три.

Отсюда и поддержка Traverson JSON-Path.Если вы посмотрите справочную документацию , то легко заметить, что можно указать выражение JSON-Path, чтобы помочь выбрать, какую ссылку вы хотите.

Пока выбранный атрибут является URI, затем Traverson будет «прыгать» на него.

ПРИМЕЧАНИЕ. При простом использовании rel вы можете указать несколько rel в виде строк в follow(...).При использовании чего-либо еще, например, выражения JSON-Path или rel(...), используйте по одному follow(...) на прыжок .К счастью, это не трудно прочитать о том, что вы помещаете каждый прыжок в отдельную строку (опять же, см. Справочные документы для примеров).

...