net*_*ain 6 rest web-services http design-principles
我是REST的新手,但据我所知,我知道以下URL符合REST原则.资源的布局如下:
/user/<username>/library/book/<id>/tags
^ ^ ^ ^
|---------|-----------|---|- user resource with username as a variable
|-----------|---|- many to one collection (books)
|---|- book id
|- many to one collection (tags)
GET /user/dave/library/book //retrieves a list of books id's
GET /user/dave/library/book/1 //retrieves info on book id=1
GET /user/dave/library/book/1/tags //retrieves tags collection (book id=1)
Run Code Online (Sandbox Code Playgroud)
但是,如何优化此示例API呢?比如说我在我的图书馆里有10K书,我想获取我图书馆里每本书的详细信息.我真的应该/library/book/<id>为每个给出的id 强制进行http调用/library/book吗?或者我应该启用多个id作为参数?/library/book/<id1>,<id2>...并且喜欢一次使用100个id进行批量提取?
REST原则对这种情况有何看法?你有什么看法?
再次感谢.
这完全是设计问题.
我可以定义一个bookc资源并像这样使用它:
GET /user/dave/library/book?bookList=...
Run Code Online (Sandbox Code Playgroud)
你如何进一步指定bookList参数实际上是你设想的这种资源的用途.你可以,例如:
GET /user/dave/library/book?bookList=1-10
GET /user/dave/library/book?bookList=1,2,5,20-25
Run Code Online (Sandbox Code Playgroud)
或者您只需翻阅所有书籍:
GET /user/dave/library/book?page=7&pagesize=50
Run Code Online (Sandbox Code Playgroud)
但在我看来,特别是带有一长串"随机"ID的表单似乎很不合适.也许我会改为定义一个filter参数,所以我可以指定:
GET /user/dave/library/book?filter=key,value&filter=key,value
Run Code Online (Sandbox Code Playgroud)
至于您关于HTTP URL长度限制的问题,标准没有设置任何.但浏览器可能会有所不同......请看这个SO主题
更严格地说,RESTful可以通过HTTP头指定查询参数,但我想传达的一般想法不会改变.
希望这似乎适合你......
| 归档时间: |
|
| 查看次数: |
3265 次 |
| 最近记录: |