restful api设计_RESTful API设计

restful api设计

restful api设计

在编写API规范之前,必须考虑RESTful API规范的五个主要方面。

在本文中,我将使用产品用例的示例来讨论这五个功能。 在开始之前,请确保我们了解API和REST的含义。

如果您已经熟悉API设计并且想进一步学习,建议您看一下该教程: 如何使用API​​ Designer设计RESTful API

什么是API?

应用程序编程接口(API)是一组规则,用于定义软件组件如何与另一个软件组件进行交互。 在Web服务的上下文中,这些交互关系与根据持久性存储的四个基本功能(创建,读取,更新和删除(CRUD))进行数据的操纵和检索有关。 定义这些规则的样式称为“ REST建筑样式”。 这是由Roy Fielding博士在其2000博士论文“体系结构样式和基于网络的软件体系结构设计”中设计的

什么是REST?

REST代表代表性状态转移。 它提供了一种表示资源(即数据)并通过调用URI通过HTTP传输资源的方法。 URI将数据表示为名词,而数据功能(CRUD)由HTTP方法表示。 通常,HTTP方法将映射到CRUD功能,如下表所示。

CRUD功能 HTTP方法
得到
开机自检创造
放置/修补更新/部分更新
删除删除

RESTful API规范设计

API设计人员可以选择RESTful建模语言来实现API设计。 以下是使用最广泛的两个方法:

  • OAS(昂首阔步)
  • RAML(RESTful API建模语言)

每个人都有其自己的API设计规范方法,每个人都有其优点和缺点,尽管它们都尊重REST架构风格。

我选择在此博客文章中使用RAML,因为我认为它是不熟悉API建模语言的人可以使用的最直观的建模语言。 我将在本文中使用的REST API设计工具是教程 如何使用MuleSoft的API Designer设计您的第一个API时使用的高效工具。 该工具非常适合使用RAML或Swagger(OAS 2和3)设计RESTful API。 但是,您可以使用任何适合您的工具。

产品用例

为了在规范中添加上下文,我将定义一个用例。 假设我们公司要求一个表示产品数据的API。 REST API将公开与完整CRUD功能一致的功能,并且API规范必须记录产品数据类型并提供示例。

让我们开始定义API规范的标头。

定义API标头

我将从定义规范文件的头开始,在该头中定义API标题(出于显示目的),资产版本以及将在其中部署实现的基本URI。

#%RAML 1.0标题:产品APIbaseUri: http : //big-product-compnay.com/api/ {version}版本:v1

接下来,我将定义我们产品的资源表示形式。

定义资源URI

资源URI代表产品数据,正是这些URI可以执行CRUD功能,从而代表创建,读取,更新和删除操作。

为了遵守REST约定,资源URI被命名为与它所代表的实际数据相关的名词。 公用资源可能如下表所示:

资源网址 数据类型
/帐户帐户资料
/发票发票数据
/用户用户数据

REST风格的期望是,对GET / products端点的调用将返回产品列表(即使响应仅包含一个产品),因此,由于资源表示集合,因此名词是复数的。 RAML语法指出资源URI必须以冒号终止:

/产品:

定义资源URI后,将使用HTTP方法指定要在这些资源上操作的CRUD功能。

为资源URI定义HTTP方法

如上所示,定义了五种HTTP方法供REST API规范的开发人员使用。

REST风格指出GET和POST HTTP方法与单个URI资源一起使用,因为它们的目标不是可识别资源,而是资源列表。 相反,DELETE,PUT和PATCH HTTP方法附带一个URI变量,用于标识受影响的资源。 看下面的代码。

/产品:得到:帖子:/ {productID}:pu t:删除

请注意,如何将GET和POST方法与/ products URI一起使用,以及将PUT和DELETE与/ products / {productID} URI一起使用。

POST和PUT端点必须包括资源表示,在我们的情况下是要创建(POST)或更新(PUT)的产品。 请求主体必须在规范中定义,以便调用者可以清楚地知道必须发送哪些数据以及采用哪种格式。

定义HTTP请求

为了满足REST要求以清晰的资源表示,API规范必须定义数据类型并提供有效的数据示例。 在我们的案例中,这将是定义产品结构和示例的数据类型。

指定数据交换格式也是一项要求(实际上是一项强烈建议)。 通常,它被定义为MIME类型,例如JSON和XML,并且可以是许多类型之一

对于我们的用例,让我们向每个端点添加一个示例并定义MIME类型。

在产品GET,POST和PUT端点下方的RAML中,使用POST和PUT的产品数据示例定义。 数据交换格式定义为application / JSON。

/产品:得到:帖子:身体:应用程序/ json:例如:{“名称”:“床”,“价格”:“ 100”}/ {productsID}:放:身体:应用程序/ json:例如:{“名称”:“床”,“价格”:“ 100”}删除:

对于对API的每个请求,都应该预期响应,并且应该在RESTful API规范中定义响应。 让我们看一下这是如何完成的。

定义HTTP响应

响应于请求,调用者希望接收包含数据(或至少一条消息)和指示请求状态的HTTP状态代码的正文。 HTTP状态代码属于五类之一,如下所示:

  • 1xx->信息性
  • 2xx->成功
  • 3xx->重定向
  • 4xx->客户端错误
  • 5xx->服务器错误

状态码的第一位数字标识响应的状态。 可以在此处找到状态代码的完整列表。

对于我们的产品示例,让我们为GET和DELETE方法定义一个响应。 我将为GET和DELETE请求定义一个200代码,以指示操作成功。

/产品:得到:描述:检索所有产品列表回应:200:身体:应用程序/ json:例如:{“名称”:“床”,“价格”:“ 100”}帖子:/ {productID}:pu t:删除:回应:200:描述:删除ID为{productID}的产品

现在,我们已经定义了API规范的所有主要方面,下面将它们放在一起。

全部放在一起

完整的RESTful API设计如下所示:

#%RAML 1.0标题:产品APIbaseUri: http : //big-product-compnay.com/api/ {version}版本:v1

/产品:得到:描述:检索所有产品列表回应:200:身体:应用程序/ json:例如:{“名称”:“床”,“价格”:“ 100”}帖子:身体:应用程序/ json:例如:{“名称”:“床”,“价格”:“ 100”}/ {productID}:放:身体:应用程序/ json:例如:{“名称”:“床”,“价格”:“ 100”}删除:回应:204:描述:删除ID为{productID}的产品

最后的想法

在本教程中,我展示了使用RAML作为RESTful API建模语言的API规范设计的五个方面。 我已经介绍了如何根据REST体系结构样式定义资源,方法,请求和响应。

如果您想更深入地了解API设计,建议您看一下《 如何使用API​​ Designer设计第一个API》教程。

翻译自: https://www.javacodegeeks.com/2020/08/restful-api-design.html

restful api设计

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值