Принцип HATEOAS в модернизации? ссылка на ресурсы?

Как я могу использовать принципал HATEOAS при модернизации? Есть ли способ использовать ссылки в модификации? Или мне самому разобрать?

links: [4]
0:  {
rel: "self"
href: "https://localhost/api/product/9"
}-
1:  {
rel: "comp"
href: "https://localhost/api/product/19/comp"
}-
2:  {
rel: "eval"
href: "https://localhost/api/product/19/eval"
}

Мой общий вопрос: как я могу использовать ссылки на ресурсы (http://en.wikipedia.org/wiki/HATEOAS)? Есть ли возможность? Например, как я могу вызвать href «comp» для ресурса и получить возврат проанализированного Java-объекта (из JSON)?


person E.P    schedule 18.05.2015    source источник
comment
Пожалуйста, постарайтесь показать больше своих работ и своих мыслей. какие аргументы вы знаете? как ты их видишь? что ты читал?   -  person rmalchow    schedule 18.05.2015
comment
Я внес небольшие коррективы, чтобы немного исправить грамматику. Добро пожаловать!   -  person David Hoelzer    schedule 18.05.2015
comment
вы можете проверить мой код HATEOAS с модифицированным кодом здесь: stackoverflow.com/questions/33404734   -  person Gabor    schedule 29.10.2015


Ответы (2)


Retrofit отлично работает и, вероятно, имеет самый чистый API, насколько остальные клиенты идут в мире Java. Единственным ограничением является то, что очень сложно использовать ссылки. Я понимаю, что это, вероятно, не было целью дизайна, но вы бы рассмотрели это? Я мог бы легко вызвать URL-адрес напрямую, но я действительно хочу иметь возможность использовать обработку ошибок, ведение журнала, преобразователи и все остальное, настроенное в файле RestAdapter.

В настоящее время вы можете сделать:

@GET("/{path}")
SomeObject get(@EncodedPath("path") String path);

Это работает хорошо, но это означает, что вы можете переходить только по ссылкам, ведущим на сервер, настроенный с помощью RestAdapter. Что вы думаете о добавлении аннотации @Url?

@GET 
SomeObject get(@Url String url);

@POST
void post(@Url String url, @Body SomeObject object);
person Umer Kiani    schedule 04.05.2016

Модификация 2 имеет для этого аннотацию @Url.

Пример:

public interface TempoRestApi {
    @GET("worklogs/issue/{issueKey}")
    Call<IssueWorklogResponse> getIssueWorklog(@Path("issueKey") String issueKey, @Query("from") String date, @Query("to") String end);

    @GET
    Call<IssueWorklogResponse> getIssueWorklog(@Url String url);
}

Первый метод — это обычный вызов модификации @GET. В ответе этого есть метаданные, которые дают абсолютный URL-адрес следующей страницы результатов:

"metadata": {
    "count": 50,
    "offset": 0,
    "limit": 50,
    "next": "https://api.tempo.io/core/3/worklogs/issue/KEY-1?from=2020-01-01&to=2020-12-31&offset=50&limit=50"
  }

Второй можно использовать с возвращенной ссылкой next, которую дает первый вызов.

person Wim Deblauwe    schedule 14.10.2020