确定第一个RESTful Web服务的需求

想象一下,一个开发人员团队正在开发适用于iOS和Android的移动应用程序,并且需要一个RESTful Web服务来执行toys的CRUD操作。 我们确定不想使用模拟Web服务,并且不想花费时间来选择和配置ORM(对象关系映射的简称)。 我们希望快速构建一个RESTful Web服务,并尽快准备好开始在移动应用程序中与它进行交互。

我们希望toys能够存储在数据库中,但我们还不准备立即把它用在生产环境中。 因此,我们可以使用最简单的关系数据库,这样我们就不必花太多时间执行复杂的安装或配置。

Django REST框架(也称为DRF)将允许我们轻松完成此任务,并开始向我们的RESTful Web服务的第一个版本发出HTTP请求。 在这种情况下,我们将使用一个非常简单的SQLite数据库,这是一个新的Django REST框架项目的默认数据库。

首先,我们必须指定主要资源的要求:一个 ‘toy’。 我们需要toy实体的以下属性或字段:

  • 整数标识符
  • 一个名字
  • 可选的描述
  • 玩具类别描述,例如动作人物,玩偶或玩具
  • 发布日期
  • 一个bool值,表示玩具是否已经在网上商店的主页上至少一次

此外,我们希望有一个时间戳,其中包含玩具添加到数据库表中的日期和时间。

在RESTful Web服务中,每个资源都有自己唯一的URL。 在我们的网络服务中,每个玩具都有自己唯一的URL。

注:下面所说的http请求方法即 GET,PUT,POST,DELETE等

下表显示了我们的第一个Web服务版本需要支持的方法,HTTP 请求方法,作用范围和和含义。 每个方法都由HTTP 请求方法和范围组成。 所有方法对toy和集合都有明确的含义:

HTTP verb Scope Semantics
GET Toy 请求单个数据
GET Collection of toys 取回所有存储在数据库中的toy数据,并根据名字按照升序排列
POST Collection of toys 创建一个新的toy
PUT Toy 更新一个已经存在的toy
DELETE Toy 删除一个toy

在上表中,GET 出现两次,但有两个不同的范围:toys 和collection of toys。 第一个显示应用于玩具的GET,即请求单个资源。 第二行显示应用于玩具集合的GET,即应用于资源集合的请求。

我们希望我们的Web服务能够区分URL中集合的单个资源。 当我们引用一个集合时,我们将使用斜杠(/)作为URL的最后一个字符,如http:// localhost:8000 / toys /。 当我们引用单个资源时我们不会使用斜杠(/)作为URL的最后一个字符,如http:// localhost:8000 / toys / 5

让我们考虑一下http:// localhost:8000 / toys /是玩具集合的URL。 如果我们在前一个URL中添加一个数字,我们会识别一个ID或主键等于指定数值的特定玩具。 例如,http:// localhost:8000 / toys / 42,标识了ID等于42的玩具。

POST

我们必须使用POST方法和http:// localhost:8000 / toys / request URL编写和发送HTTP请求,以创建新toy并将其添加到toys集合中。 在此示例中,我们的RESTful Web服务将使用JSON(JavaScript Object Notation的简称),因此我们必须提供带有字段名称和值的JSON键值对来创建新玩具。 作为请求的结果,服务器将验证字段的提供值,确保它是一个有效的toy,并将其保存在数据库中。 服务器将在适当的表中插入带有新玩具的新行,然后将返回201 Created状态代码和一个带有刚刚添加成功的并且序列化为JSON的toy数据,该JSON数据包括由数据库自动生成并分配ID和toy对象:

POST http:// localhost:8000 / toys /

GET

我们需要使用GET方法和http:// localhost:8000 / toys / {id}的请求 URL来发送HTTP请求,以检索ID与{id}中指定数值匹配的玩具。 例如,如果我们使用请求URL http:// localhost:8000 / toys / 25,服务器将检索ID为25的玩具。作为请求的结果,服务器将从中检索具有指定ID的玩具。作为请求的结果,服务器将从数据库中检索具有指定ID的玩具,并用Python创建适当的toy对象。如果找到玩具,服务器会将toy对象序列化为JSON,返回200 OK状态代码,并返回带有序列化toy对象的JSON正文。如果没有玩具与指定的ID匹配,则服务器将仅返回404 Not Found状态:

GET http:// localhost:8000 / toys / {id}

PUT

我们需要使用PUT方法,来编写并发送HTTP请求,并请求URLhttp:// localhost:8000 / toys / {id},通过检索ID与{id}中的值匹配的玩具,然后用提供的数据来替换它。此外,我们还需要提供带有字段名称和值的JSON键值对,来创建并替换现有玩具的新玩具。作为请求的结果,服务器将验证字段的提供值,确保它是有效玩具,然后用新的数据替换匹配ID的toy。更新操作后,玩具的ID将相同。服务器将更新相应表中的现有行,它将返回200 OK状态代码和JSON主体如果我们没有为新玩具提供所有必要字段,服务器将返回400 Bad Request状态代码。如果服务器找不到具有指定ID的玩具,则服务器将仅返回404未找到状态:

PUT http:// localhost:8000 / toys / {id}

DELETE

我们需要使用DELETE 方法 ,来编写并发送HTTP请求,并请求URLhttp:// localhost:8000 / toys / {id}以删除ID与{id}中指定数字值匹配的玩具。例如,如果我们通过请求URL http:// localhost:8000 / toys / 34,服务器将删除ID为34的玩具。作为请求的结果,服务器将从数据库中检索具有指定ID的玩具并在Python中创建适当的玩具对象。 如果找到玩具,服务器将请求ORM删除与此玩具对象关联的玩具行,并且服务器将返回204 No Content状态代码。 如果没有玩具与指定的ID匹配,则服务器将仅返回404 Not Found状态:

DELETE http:// localhost:8000 / toys / {id}

你可能感兴趣的:(确定第一个RESTful Web服务的需求)