web-services - 我的网络服务是 RESTFUL 的吗?

标签 web-services rest

我有一个 REST Web 服务,它公开了 2 种方法-

  • [POST 方法] 客户端将以 XML 的形式提供对象列表。我的 Web 服务方法将根据对象 [mode = 插入/更新] 中的一个属性插入/更新对象列表,并将返回一个包含对象列表及其状态 [插入/更新是否成功] 的 XML。
  • [POST 方法] 它将接受一个 objectIds 列表,并以 XML 的形式从服务器返回这些对象的状态。

  • 我知道我们应该使用
  • 获取信息的GET方法
  • 用于创建新条目的 POST 方法
  • 用于更新现有条目的 PUT 方法。

  • 我知道我们的实现违反了一些 REST 约束,但我们的要求迫使我们以这种方式实现它。

    我的问题是 - 可以改变约束以适应我们的要求吗?

    最佳答案

    您尝试做的事情可以通过 RESTful 方式完成。尽管 POST 通常用于将单个实体添加到集合中,但它也可用于将数据块提交到“数据处理资源”。这几乎打开了用 POST 做任何你想做的事情的大门。

    人们经常误解 REST 约束,并认为您必须使用 PUT 和 DELETE 才能成为 RESTful。不是这种情况。不需要使用所有方法。唯一的要求是不要滥用您使用的那些。

    显然,如果您将单个实体发布到集合以创建实体,那么对于您的 API 用户来说会更直观。但是,如果这对您来说不是一个可行的选择,那么您可以自由定义一个新的媒体类型,该媒体类型可以包含一组要由某些数据处理资源创建/更新的对象。

    重要的是要明确这些规则。您应该创建一个新的媒体类型,例如 application/vnd.yourcompany.objectlist+xml并且您需要编写有关如何构建该媒体类型的文档。

    现在您已经定义了媒体类型,您的客户端将需要知道在哪里发布该对象列表。理想情况下,您将定义一个新的链接关系(例如 objectprocessor ),该关系可用于其他文档以提供要 POST 到的 URL。在该链接关系的规范文档中,您应该向客户端开发人员解释,当您发布 application/vnd.yourcompany.objectlist+xml 时到具有链接关系的链接 objectprocessor那么将要发生的是 x、y 和 z。

    假设您的根 URL 返回了某种 XHTML 文档,例如:

    <html>
      <h1>My awesomely restful service that can create objects in batches</h1>
      <link rel='objectprocessor' href='http:/example.org/myservice/objectprocessor'/>
    </html>
    

    客户端应用程序可以处理这个文档,发现这个链接,并根据它需要发布一个 application/vnd.yourcompany.objectlist+xml 的链接关系定义来理解。到 href 中指定的端点。

    通过这种方式,消息完全是自我描述的,您正在与用可发现的 URL 标识的资源进行交互,并且您处于统一界面的规则之内。

    关于web-services - 我的网络服务是 RESTFUL 的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3139405/

    相关文章:

    javascript - 如何使用Python追踪网页中特定时间段内的特定内容?

    web-services - 所有的网络服务都是自动的restful 网络服务吗?

    java - RequestMappingHandlerMapping 是 RestController 的截断路径

    python - 如何验证 Flask 应用程序中的 URL 参数?

    javascript - Nodejs 多线程 Web api

    web-services - 使用 Rest Web 服务的 Soap 客户端

    java - 区分 WebParam 中的 Null 和空集合

    java - JSON 中的阿拉伯字符

    java - 如何在 Eclipse 外部的远程 tomcat 服务器上部署 Web 项目,其中包含 .jar 文件

    java - 请放心/Stack Exchange API : Unable to get success response while trying to hit service from Eclipse