【问题标题】:What is the difference between offering a REST API and offering a "web service" with a basic API to retrieve and/or modify data?提供 REST API 和提供带有基本 API 以检索和/或修改数据的“Web 服务”之间有什么区别?
【发布时间】:2011-10-30 06:01:18
【问题描述】:

所以我即将使用 django-piston 用 Django 编写一个 REST API,但我的雇主只是希望能够检索和创建数据,所以我想知道两者之间有什么区别:

  • 只是创建方法来设置和检索数据并制作它们 公开可用(当然在 地点)
  • 创建 REST API 以创建和检索数据 ?

提前致谢!

【问题讨论】:

  • 第一个要点实际上是什么意思?您所说的“使它们公开可用”是什么意思?你了解 REST 是/暗示/意味着什么吗?
  • 抱歉给您带来了困惑。我的意思是任何人都可以通过一组 URL 访问它们,就像这样:maps.googleapis.com/maps/api/geocode/…
  • 我只读过 REST 以资源为中心并使用 4 种 HTTP 方法,但我在实际代码中没有太多经验,所以我想知道如何在我的情况
  • “任何人都可以通过一组 URL 访问”(除了安全性)对我来说听起来很像 REST。是的,我知道 URL 结构看起来不像 RESTful。
  • 查看 django-tastypie (github.com/toastdriven/django-tastypie)。它正在积极开发中,而不是 django-piston,后者近一年没有提交。我现在正在使用一个可识别的分叉版本的活塞,但如果在我开始编写这个 API 时有 sweetpie 存在,我会单独使用 sweetpie 来参与社区活动。

标签: django web-services rest


【解决方案1】:

您的第二点基本上是您的第一点的子集。 REST 只是一组创建和检索数据的方法。然而,它是一组相当标准化的方法,使用 HTTP 动词而不是不同的 url 来声明您要执行的操作。

因此,您只需使用 /cmets/ 和 POST 来创建、PUT 来更新和 DELETE 来删除,而不是 /cmets/new/、/cmets/delete/、/cmets/update/。

我也同意 Zach 关于 TastyPie 的看法。

【讨论】:

    【解决方案2】:

    “RESTful”的两个关键替代方案是传统的 html 表单或在 HTTP 之上实现的更正式的 RPC 协议,如 XML-RPC 或 SOAP。

    前者的主要优点是它可以通过网络浏览器调用,根本不需要客户端代码;但除非应用程序的设计经过深思熟虑,否则通常很难从自定义客户端驱动这样的界面;它必须经常设置 cookie 来进行身份验证并指定它不感兴趣的参数。这种 API 也没有数据类型的概念,一切都是文本。

    后者的优势是让您立即启动并运行;您可以使用装饰器在 python 中编写普通函数,并且它们可用于具有适当客户端库的客户端。主要的缺点也是这通常需要客户端有这样的库。诸如soap 或xml-rpc 之类的东西通常不是浏览器内应用程序或资源受限设备的选项。

    RESTful 是一种结合了两者优点的一种中间方式。由于语义纯粹是根据 HTTP 定义的,因此任何能够发出 HTTP 的客户端都可以使用 RESTful API。 HTTP 比普通的旧 Web 表单灵活得多,通常在为支持所需结构的请求或响应提供 Content-Type 方面。不幸的是,实际上并没有一个单一的标准来定义 RESTful 客户端或服务应该如何表示其数据,因此必须在两端进行一些自定义以使事情以最佳方式工作。有时,灵活性意味着您需要花费更多时间来获得恰到好处的 api,而如果您使用不同的接口则必须这样做,但这通常会导致更精简且泄漏更少的抽象。

    有一些标准或事实上的标准也是 RESTful 接口的良好模型,例如 json-rpc 和 Atom 发布协议。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-24
      • 2013-10-20
      • 2011-05-12
      • 1970-01-01
      • 2017-10-02
      • 2014-06-20
      相关资源
      最近更新 更多