我正在构建一个REST服务器(向我的客户提供书籍)
其他架构建议构建这样的URL
如果我需要提供以下内容,那将是一个很好的做法:
第一
我在考虑/ page / {id}(用于json信息)和/ page / {id} /下载用于doc格式 (有推荐吗?)
第二
我应该构建像/ bookstatus这样的新资源,还是应该为主要资源/ book / {id} / status和/ book / {id}提供所有信息的多个选项
在这种情况下,我需要知道是否有一些最佳实践和网址命名约定!
答案 0 :(得分:3)
[学术咆哮] REST不建议使用URI模板,因为客户端需要知道这种带外信息。您可以添加一些喜欢的内容,但可以轻松猜测或编码。 [/学术咆哮]
方法是获取应用程序的入口点,然后使用链接指导您的客户。像这样,您的应用程序界面被发现,带外信息被保持在最低限度。
您所服务的代表类型是通过内容协商或客户明确请求完成的。例如一些想法:
GET /mybooks (Content negotiation or server decides - feel like html?)
GET /mybooks.xml
GET /mybooks.json
GET /mybooks.csv
GET /mybooks.xhtml
GET /mybooks/{id}.doc (Download)
PUT /mybooks/{id} (Add a book / id to my list)
DELETE /mybooks/{id} (Remove from my list)
POST /mybooks (Add a book / id to my list)
注意:PUT是幂等的,POST不是。
书籍列表将以此媒体类型进行编码,例如descritpion,其中包含链接。您可以按照自己的方式对超媒体(JSON或xHtml)中的链接进行编码,但最好使用某些标准(如<link>
和<a>
标记)来覆盖更广泛的受众。然后,您可以将命名/类型链接指向所需的格式。例如一些想法:
GET /book/{id}.html (Status and other info)
GET /book/{id}/summary (Status and other info)
GET /book/{id}.doc (Download)
GET /book/{id}.zip (Download)
GET /book/{id}/chapter/{id}.doc
POST /book (add book to database)
DELETE /book/{id} (Burn the book)
您可以根据需要设计URI 。但如果资源可以通过链接发现,那就更好了。您可以使用其他动词,例如OPTIONS,HEAD,GETBOOKINFO等,但最好坚持标准动词。
答案 1 :(得分:1)
据我所知,命名约定取决于你(显然有一些逻辑)。您可能会对同一资源/网址使用不同的动词。
带有PUT,GET,DELETE的/ book / {id} /用POST预订
答案 2 :(得分:1)
最佳做法是使URI唯一(意味着在功能方面没有冗余),无论您提供的内容类型如何。考虑统一URI并使用内容协商和HTTP接受标头提供不同的内容。
理想情况下,GET / book / {id}会以text / html,application / json等形式提供书籍详细信息,具体取决于客户指定的接受标题。
http://www.w3.org/QA/2006/02/content_negotiation.html http://www.w3.org/Protocols/rfc2616/rfc2616-sec12.html
答案 3 :(得分:0)
正如Irido所说,命名完全取决于你。如果我在你的鞋子里,我会使用参数来确定返回数据的格式,例如。 format = json或format = doc或者其他东西。如果未指定format参数,则返回默认格式。 这样,如果你想要不同的格式(只需在url中添加另一个参数),你就不必做一些花哨的url操作。您可以轻松添加新格式,而无需重新思考网址。