c# - 命名 Rest URL

标签 c# java php web-services rest

我正在构建一个 REST 服务器(用于向我的客户发送书籍)

其余架构建议像这样构造 URL

  • /book/{id} GET 获取图书 ID
  • /page/{id} GET 获取页面ID
  • 等等...

    如果我需要提供以下内容,什么是好的做法:

    第一

  • json 格式的页面信息(如页数,..)
  • doc格式的页面信息(供下载)

    我正在考虑/page/{id} (用于 json 信息)和/page/{id}/download 用于 doc 格式 (有这方面的建议吗?)

    第二

  • 返回图书 json 信息(例如/book/{id}
  • 返回图书状态(0,1)

    我应该构建一个像/bookstatus 这样的新资源,还是应该为主要资源/book/{id}/status 和/book/{id} 提供多个选项以获取所有信息

    我需要知道在这种情况下,url 是否有一些最佳实践和命名约定!

  • 最佳答案

    [学术咆哮] 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 不是。

    书籍列表将以此媒体类型进行编码,例如带有特定书籍链接的描述。您可以按照自己想要的方式对超媒体(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 等,但最好坚持使用标准动词。

    关于c# - 命名 Rest URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5361836/

    相关文章:

    c# - 在 64 位机器上以 32 位模式运行 Oracle Client

    java - 在java中解析字符串数组以获取整数值

    java - 如何从 java 包运行 Applescript

    php - 标记未显示在 map 上

    php - Codeigniter 不会加载语言

    javascript - 如何在 php 中使用 jquery 或 javascript 从 bootstrap 下拉列表中打印所选元素

    c# - NUnit 3 CollectionConstraint 自定义 IComparer<T> 不工作

    c# - 为什么 GetAllDateTimePatterns 方法不返回唯一格式?

    c# - 将网站作为包部署到 azure

    简单 gui 中的 java.awt.Container.checkNotAWindow 错误