【问题标题】:HATEOAS principal in retrofit? link to resources?HATEOAS 主体在改造?链接到资源?
【发布时间】:2020-10-14 22:01:41
【问题描述】:

如何在改造中使用 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)?有没有可能? 例如,我如何调用资源的“comp”href 并让我解析的 Java-Object(来自 JSON)返回?

【问题讨论】:

  • 请尝试展示更多你的作品和你的想法。你知道哪些论点?你怎么看他们?你读了什么?
  • 我做了一些小的调整来修正语法。欢迎!
  • 你可以在这里查看我的带有改造代码的 HATEOAS:stackoverflow.com/questions/33404734

标签: java android retrofit hateoas


【解决方案1】:

Retrofit 工作得很好,并且可能拥有 Java 世界中最简洁的 API。一个限制是很难使用跟踪链接。我知道这可能不是设计目标,但您会考虑吗?我可以轻松地直接调用 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);

【讨论】:

    【解决方案2】:

    Retrofit 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 链接一起使用。

    【讨论】:

      猜你喜欢
      • 2014-10-25
      • 1970-01-01
      • 2019-01-03
      • 2021-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-14
      相关资源
      最近更新 更多