V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Zovven
V2EX  ›  Java

Restful api 的资源内容应不应该带上 ID?

  •  
  •   Zovven · 2016-10-25 23:01:10 +08:00 · 3580 次点击
    这是一个创建于 2732 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近我在使用 Spring Data rest 时,我发现返回的资源内容是不带 ID 号的。

    {
      "_embedded": {
        "books": [
          {
            "createTime": null,
            "updateTime": null,
            "userId": null,
            "title": "Java",
            "originTitle": null,
            "translator": null,
            "author": "w",
            "cover": null,
            "rating": null,
            "summary": null,
            "publisher": null,
            "publishDate": null,
            "pages": null,
            "doubanId": null,
            "state": null,
            "isbn": null,
            "_links": {
              "self": {
                "href": "http://127.0.0.1:9090/api/books/1"
              },
              "book": {
                "href": "http://127.0.0.1:9090/api/books/1"
              },
              "reviews": {
                "href": "http://127.0.0.1:9090/api/books/1/reviews"
              }
            }
          }
        ]
      },
      "_links": {
        "self": {
          "href": "http://127.0.0.1:9090/api/books"
        },
        "profile": {
          "href": "http://127.0.0.1:9090/api/profile/books"
        }
      },
      "page": {
        "size": 20,
        "totalElements": 1,
        "totalPages": 1,
        "number": 0
      }
    }
    

    去项目的 issues 看到作者写到 restfult api 就不该返回资源的 id,资源的_link 表名了这个资源的 id 。

    说实话,如果这样设计在客户端的开发上会有些麻烦。

    请问下这样有什么好处呢?

    在客户端的开发如果要用_link 这样的资源标识,该怎么用呢?

    1 条回复    2016-10-25 23:23:49 +08:00
    kanezeng
        1
    kanezeng  
       2016-10-25 23:23:49 +08:00   ❤️ 1
    这是 REST 要求的自描述性,一个 REST 系统所返回的资源需要能够描述自身,并提供足够的用于操作该资源的信息,如如何对资源进行添加,删除以及修改等操作。也就是说,一个典型的 REST 服务不需要额外的文档对如何操作资源进行说明。
    你能对这个资源的所有操作都在_link 里了,需要那个操作就用哪个 link ,也不存在你自己需要取得 id 再去生成对应的 link 了。好处就是开发客户端的时候不需要文档,而是服务器端 api 有调整的话,因为会反映到对应的 link 的变化上,所以客户端不需要调整太多。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5283 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 05:48 · PVG 13:48 · LAX 22:48 · JFK 01:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.