RESTfulAPI设计原则与规范

合集下载

RESTfulAPI接口设计规范

RESTfulAPI接口设计规范

RESTfulAPI接⼝设计规范 ⽹络应⽤程序,分为前端和后端两个部分。

当前的发展趋势,就是前端设备层出不穷(⼿机、平板、桌⾯电脑、其他专⽤设备…)。

因此,必须有⼀种统⼀的机制,⽅便不同的前端设备与后端进⾏通信。

这导致API构架的流⾏,甚⾄出现"API First"的设计思想。

RESTful API是⽬前⽐较成熟的⼀套互联⽹应⽤程序的API设计理论。

REST(Representational State Transfer)表述性状态转换,REST指的是⼀组架构约束条件和原则。

如果⼀个架构符合REST的约束条件和原则,我们就称它为RESTful架构。

REST本⾝并没有创造新的技术、组件或服务,⽽隐藏在RESTful背后的理念就是使⽤Web的现有特征和能⼒,更好地使⽤现有Web标准中的⼀些准则和约束。

虽然REST 本⾝受Web技术的影响很深,但是理论上REST架构风格并不是绑定在HTTP上,只不过⽬前HTTP是唯⼀与REST相关的实例。

⼀、URI URI 表⽰资源,资源⼀般对应服务器端领域模型中的实体类。

⼀般规范:1、不⽤⼤写;2、⽤中杠 - 不⽤下杠 _;3、参数列表要encode;4、URI中的名词表⽰资源集合,使⽤复数形式。

5、URI表⽰资源的两种⽅式:资源集合、单个资源。

资源集合: /zoos //所有动物园 /zoos/1/animals //id为1的动物园中的所有动物 单个资源: /zoos/1 //id为1的动物园 /zoos/1;2;3 //id为1,2,3的动物园6、避免层级过深的Uri / 在url中表达层级,⽤于按实体关联关系进⾏对象导航,⼀般根据id导航。

过深的导航容易导致url膨胀,不易维护,如 GET /zoos/1/areas/3/animals/4,尽量使⽤查询参数代替路径中的实体导航,如GET /animals?zoo=1&area=3;7、对组合资源的访问 服务器端的组合实体必须在uri中通过⽗实体的id导航访问。

rest接口规范文档

rest接口规范文档

rest接口规范文档REST接口规范文档。

1. 概述。

REST(Representational State Transfer)是一种软件架构风格,它是一种轻量级、简单、快速的Web服务架构。

RESTful接口是基于HTTP协议的一种API设计风格,它使用标准的HTTP方法(GET、POST、PUT、DELETE)来实现对资源的操作。

本文档旨在规范RESTful接口的设计和实现。

2. 接口命名规范。

2.1 URL命名规范。

RESTful接口的URL应该使用名词来表示资源,而不是动词。

URL中的名词应该使用复数形式,以表示资源的集合。

例如,获取用户列表的接口应该使用"/users"而不是"/user/list"。

2.2 HTTP方法规范。

RESTful接口应该使用标准的HTTP方法来对资源进行操作。

具体规范如下:GET,用于获取资源。

POST,用于创建新资源。

PUT,用于更新已有资源。

DELETE,用于删除资源。

3. 请求和响应规范。

3.1 请求参数规范。

RESTful接口的请求参数应该使用标准的HTTP参数传递方式。

对于GET方法,参数应该以查询字符串的形式传递;对于POST和PUT方法,参数应该以表单参数或者JSON格式传递。

3.2 响应格式规范。

RESTful接口的响应格式应该使用标准的HTTP状态码和JSON格式。

对于成功的响应,应该返回200状态码和JSON格式的数据;对于错误的响应,应该返回相应的错误状态码和错误信息。

4. 错误处理规范。

4.1 错误状态码规范。

RESTful接口的错误状态码应该使用标准的HTTP状态码。

常见的错误状态码包括:400 Bad Request,请求参数错误。

401 Unauthorized,未授权的访问。

404 Not Found,资源不存在。

500 Internal Server Error,服务器内部错误。

4.2 错误信息规范。

Restful规范

Restful规范

Restful规范Restful规范⼀、RESTFUL API设计规范(10条):API与⽤户的通信协议,总是使⽤HTTPS协议域名:版本:可以放在路径中可以放在请求头中路径:视⽹络上任何东西都是资源,均使⽤名词表⽰通过method区分是什么操作get表⽰获取post 表⽰新增delete表⽰删除patch/put 表⽰修改过滤,通过在url上传参的形式传递搜索条件状态:状态码{"status_code":100}错误处理,返回错误信息{"status_code":100,'msg':'登录成功'} {"status_code":101,'msg':'⽤户名错误'}返回结果,针对不同的操作服务器向⽤户返回的结果返回结果提供链接⼆、基于Django的实现# 路由函数url(r'^books/', views.Books.as_view()),# 视图函数def books(request):# 获取所有图书if request.method=='GET':books=models.Book.objects.all()#把queryset对象转成json格式字符串# ll=[]# for book in books:# bo={'name':,'publish':book.publish}# ll.append(bo)#列表推导式ll=[{'name':,'publish':book.publish} for book in books]response={'code':100,'msg':'查询成功','data':ll}#safe=False 如果序列化的对象中有列表,需要设置return JsonResponse(response,safe=False,json_dumps_params={'ensure_ascii':False})。

RESTfulAPI设计的实现方法与应用

RESTfulAPI设计的实现方法与应用

RESTfulAPI设计的实现方法与应用RESTful API(Representational State Transfer API)是一种基于HTTP/HTTPS协议的API设计风格。

它的设计目的是让网络应用程序能够轻松地实现可伸缩性、可重复使用性、模块化和可定制化等特性。

本文将介绍RESTful API的设计实现方法与应用。

一、设计原则RESTful API的设计原则主要包括以下几点:1.资源导向:RESTful API的设计思想是将每个API都视为一个资源,每个资源都有自己的唯一URI(统一资源标识符)。

2.HTTP动词:RESTful API的设计中,基本的CRUD操作(Create、Read、Update、Delete)通过HTTP的四种方法(POST、GET、PUT、DELETE)来实现。

POST用于新建资源、PUT用于更新资源、GET用于获取资源,DELETE用于删除资源。

3.无状态:每个请求都包含足够的信息,以便服务器能够处理请求。

服务器不会记录任何会话或任何其他与请求有关的信息。

4.客户端–服务器分离:RESTful API的客户、服务器分离性很强。

客户端处理用户交互,服务器处理数据存储等工作。

5.缓存:服务器可以缓存请求的响应以提高性能。

6.层次结构:RESTful API可以使用多层结构,以便能够实现更高级别的功能。

二、实现方法1.URI命名RESTful API的URIs必须包含所请求资源的信息,并通过明确的定义,将请求资源的特定视图捆绑到单个URI上。

URI必须使用名词而不是动词命名。

2.资源参数RESTful API的请求必须包含完整的资源信息,包括设置资源属性值和其他相关信息。

3.响应码RESTful API必须返回合适和合法的HTTP响应码,如200、201、204、400、401、404等。

4.消息体格式RESTful API的请求和响应都必须基于json或xml格式,以便进行传输和解析。

(完整版)系统对接方案

(完整版)系统对接方案

(完整版)系统对接方案一、前言对于企业应用系统的开发和运维,通常需要与其他应用系统进行对接。

应用系统之间的对接通常以服务接口的方式进行,其中通用的对接方法为基于HTTP协议的RESTful API。

本文主要介绍RESTful API对接规范和服务接口的开发过程,以及基于Spring Boot框架的服务接口实现。

二、RESTful API对接规范RESTful API是指按照REST原则设计的API接口,包括资源名、HTTP方法、URI以及参数等要素。

在企业应用系统对接过程中,RESTful API是主要的对接方式之一。

以下是RESTful API设计的规范:1. 资源名资源名应该使用名词,而且是复数形式。

例如,对于用户信息的API,资源名应该为“users”。

2. HTTP方法HTTP方法有GET、POST、PUT、DELETE等,其中GET用于查询资源信息,POST用于新建资源,PUT用于修改已有资源,DELETE用于删除资源。

3. URIURI应该包含版本号,在主机地址之后,路径中应该包含资源名和可能的参数。

例如,/api/v1/users?name=john,表示查询名称为john的用户信息。

4. 参数参数应该使用查询字符串的方式发送,在URI中使用“?”后面跟参数的方式进行传递。

参数的名称和值都应该进行URL 编码。

三、服务接口的开发过程服务接口的开发过程通常分为以下步骤:1. 确定接口需求需要明确接口的需求,包括参数、输入输出及业务流程等。

只有明确需求,才能进行接口设计和开发。

2. 设计接口设计接口时,需要考虑接口规范和技术实现。

应该考虑接口的可用性和易用性,确保接口的稳定性及可扩展性。

3. 定义接口文档接口文档是对接口功能和参数的详细概述,包括参数名称、类型、输入输出格式等。

接口文档可以用于开发、测试和维护时的参考。

4. 开发接口在开发接口过程中,需要按照需求和设计实现对应的功能。

需要对边界条件进行测试,确保接口稳定且容错能力强。

RESTfulAPI设计原则

RESTfulAPI设计原则

RESTfulAPI设计原则RESTfulAPI(Representational State Transfer API)是一种基于HTTP协议的网络应用程序接口设计风格。

它通过URL来定位资源,使用HTTP方法(GET、POST、PUT、DELETE等)来操作资源,并通过HTTP状态码返回操作结果。

RESTfulAPI的设计原则包括以下几点:1. 资源定位RESTfulAPI的核心思想是以资源为中心进行设计。

每个API对应一个或多个资源,资源使用URL进行唯一标识。

在API的设计过程中,应该明确定义资源的URL,并通过合适的命名方式来表达资源的层级关系。

例如,对于一个博客系统的API,可以以博客文章为资源,使用类似于“/articles/{articleID}”的URL进行资源定位。

2. 使用合适的HTTP方法RESTfulAPI使用HTTP方法来进行资源的操作。

根据HTTP方法的语义,选择合适的方法进行操作。

常用的HTTP方法包括GET、POST、PUT和DELETE。

GET用于获取资源,POST用于创建资源,PUT用于更新资源,DELETE用于删除资源。

在设计API时,应该根据具体的业务需求选择合适的HTTP方法,并遵循HTTP的语义。

3. 使用合适的HTTP状态码RESTfulAPI使用HTTP状态码来表示操作的结果。

常见的HTTP状态码包括200、201、204、400、401、404、500等。

其中,200表示成功,201表示资源创建成功,204表示成功但无内容,400表示请求错误,401表示未授权,404表示资源不存在,500表示服务器内部错误。

在设计API时,应该合理使用HTTP状态码,并携带必要的信息,以便客户端能够正确处理返回结果。

4. 使用合适的数据格式RESTfulAPI可以使用多种数据格式进行数据的传输,常见的数据格式包括JSON、XML和HTML等。

在设计API时,应该选择合适的数据格式,以满足客户端的需求。

RESTful API接口设计规范

RESTful API接口设计规范

RESTful API接口设计规范随着互联网的普及,Web技术的快速发展,越来越多的应用程序开始前后端分离,前端通过RESTful API接口与后端进行交互。

为了保证RESTful API接口的良好使用体验和开发效率,设计RESTful API接口需要遵守一定的规范。

一、RESTful API接口设计原则1.资源定位RESTful API接口应该通过URL来标识资源的位置,URL中使用标准的HTTP方法(GET、POST、PUT、DELETE)和标准的HTTP状态码(200 OK、201 Created、204 No Content、400 Bad Request、401 Unauthorized、403 Forbidden、404 Not Found等)。

例如:GET /articles/1 表示获取ID为1的文章信息,PUT/articles/1 表示更新ID为1的文章信息,DELETE /articles/1 表示删除ID为1的文章信息,POST /articles 表示创建一篇新的文章。

2.统一接口RESTful API接口应该具有统一的接口,首先需要确定资源的URL和资源的请求方式,其次需要确定请求的参数和返回的格式。

例如:GET /articles?category=1&status=1 表示获取分类为1,状态为1的文章列表,返回JSON格式的数据。

3.无状态通信RESTful API接口应该保持无状态通信,即每次请求都包含所有必要的信息,应用程序无需维护用户状态。

例如:用户每次请求API之前,需要通过OAuth认证或者Token认证获得访问权限,每次请求都需要添加Token等认证信息,避免请求与服务器之间的状态不同步。

二、RESTful API接口设计规范1.资源命名RESTful API接口中的资源应该使用名词作为资源名称,使用复数形式表示一组资源,使用短横线(-)作为单词之间的连接符。

restfulapi介绍

restfulapi介绍

restfulapi介绍RESTful API是一种基于REST架构风格设计的API。

它是一种设计API的方式,旨在提供简单、统一的接口,使得不同系统之间能够进行有效的通信和交互。

RESTful API的设计原则包括资源的唯一标识、统一的接口、无状态性、资源的自描述性和超媒体作为应用状态引擎等。

首先,RESTful API的核心是资源。

每个资源都有一个唯一的标识符,客户端通过这个标识符来操作资源。

资源可以是任何事物,比如用户、订单、商品等。

RESTful API使用统一的接口(如HTTP协议)来对资源进行操作,包括对资源的创建、读取、更新和删除(CRUD操作)。

这使得不同系统之间能够使用相同的方式来访问和操作资源,提高了系统的互操作性。

其次,RESTful API是无状态的,即每个请求都是独立的,服务器不会保存客户端的状态信息。

这样可以提高系统的可伸缩性和可靠性,因为服务器不需要保存大量的状态信息。

此外,RESTful API的资源具有自描述性,即资源本身包含了足够的信息来描述其自身。

客户端可以通过获取资源的表述来了解如何操作资源,而不需要依赖外部文档。

最后,RESTful API中超媒体作为应用状态引擎的概念意味着客户端通过获取资源的表述来了解下一步可以做什么操作,从而使得客户端和服务器之间的交互更加灵活和动态。

总之,RESTful API通过简单、统一的接口和无状态的通信方式,使得不同系统之间能够进行有效的通信和交互。

它的设计原则包括资源的唯一标识、统一的接口、无状态性、资源的自描述性和超媒体作为应用状态引擎等,这些原则使得RESTful API成为一种非常流行和强大的API设计方式。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

RESTful API设计原则与规范一、背景与基础概念 2二、RESTful API应遵循的原则 31、协议(Protocol) 32、域名(ROOT URL) 33、版本(Versioning) 34、路径(Endpoints) 45、HTTP动词(HTTP Verbs) 56、过滤信息(Filtering) 67、状态码(Status Codes)78、错误处理(Error handling)89、返回结果(Response)810、使用HATEOAS的Hypermedia API 811、认证(Authentication)9三、Swagger API标准9REST,即Representational State Transfer的缩写。

RESTful架构,是目前最流行的一种互联网软件架构。

它结构清晰、符合标准、易于理解、扩展方便,基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制,所以正得到越来越多网站的采用。

如果一个架构符合REST原则,就称它为RESTful架构。

本文即将描述的,即是创建RESTful架构的API所要遵循的原则与规范。

一、背景与基础概念Web 应用程序最重要的REST 原则是,客户端和服务器之间的交互在请求之间是无状态的。

从客户端到服务器的每个请求都必须包含理解请求所必需的信息。

•资源(resource):网络上的一个实体或者说是一个具体信息,可以是一段文本、一张图片、一首歌曲、一种服务。

•统一资源定位符(URI,Universal Resource Identifier):一个资源的识别符或者说是一个地址,通过URI你可以定位到特定的资源。

要获取这个资源,需要访问它的URI,因此,URI就成了每一个资源的地址或独一无二的识别符。

•状态转换(State Transfer): 所有资源都共享统一的接口,以便在客户端和服务器之间传输状态。

客户端与服务器互动的过程,通常涉及到服务器端数据和状态的变化过程,比如文件被修改,访问数量增加等。

使用的是标准的HTTP 方法,Http标准中定义的最主要四个动词:GET、POST、PUT、DELETE。

它们分别对应四种基本操作:-GET:用来获取资源-POST:用来新建资源-PUT:用来更新资源-DELETE:用来删除资源•Hypermedia 是应用程序状态的引擎,资源表示通过超链接互联。

二、RESTful API应遵循的原则1、协议(Protocol)API与用户的通信协议,尽量使用HTTPs协议。

HTTPs协议的所有信息都是加密传播,第三方无法窃听,具有校验机制,一旦被篡改,通信双方会立刻发现,配备身份证书,防止身份被冒充。

2、域名(ROOT URL)应该尽量将API部署在专用域名之下。

https://如果确定API很简单,不会有进一步扩展,可以考虑放在主域名下。

https:///api/3、版本(Versioning)应该将API的版本号放入URL。

https:///v1/另一种做法是,将版本号放在HTTP头信息中,但不如放入URL方便和直观。

Github采用这种做法。

注:需要注意版本规划,以便以后API的升级和维护。

使得API版本变得强制性,不要发布无版本的API,使用简单数字,避免小数点如2.5。

4、路径(Endpoints)路径表示API的具体网址URL。

在RESTful架构中,每个URL代表一种资源(resource),所以网址中不能有动词,只能有名词,而且所用的名词往往与代表的对象名称对应。

一般来说,某一同种记录的”集合”(collection),所以API中的名词也应该使用复数。

具体细则:1、使用名词而不是动词。

举例来说,某个URL是/cards/show/1,其中show是动词,这个URL就设计错了,正确的写法应该是/cards/1,然后用GET方法表示show。

如果某些动作是HTTP动词表示不了的,你就应该把动作做成一种资源。

比如网上汇款,从账户1向账户2汇款500元,错误的URI是:POST /accounts/1/transfer/500/to/2。

正确的写法是把动词transfer改成名词transaction,资源不能是动词,但是可以是一种服务:POST /transaction?from=1&to=2&amount=500.00。

2、使用复数名词。

不要混淆名词单数和复数,为了保持简单,只对所有资源使用复数。

举例:/cars 而不是/car/users 而不是/user/products 而不是/product/settings 而不是 /setting3、使用子资源表达关系。

如果一个资源与另外一个资源有关系,使用子资源。

举例:GET /cars/911/drivers/ 返回car 911的所有司机GET /cars/911/drivers/8 返回car 911的8号司机5、HTTP动词(HTTP Verbs)对于资源的具体操作类型,由HTTP动词表示。

常用的HTTP动词有下面五个:•GET(SELECT):从服务器取出资源(一项或多项)。

•POST(CREATE):在服务器新建一个资源。

•PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)。

•PATCH(UPDATE):在服务器更新资源(客户端提供改变的属性)。

•DELETE(DELETE):从服务器删除资源。

还有两个不常用的HTTP动词。

•HEAD:获取资源的元数据。

•OPTIONS:获取信息,关于资源的哪些属性是客户端可以改变的。

注:Get方法和查询参数不应该涉及状态改变。

使用PUT, POST 和DELETE方法而不是GET 方法来改变状态。

6、过滤信息(Filtering)如果记录数量很多,服务器不可能都将它们返回给用户。

API应该提供参数,过滤返回结果。

为集合提供过滤、排序、选择和分页等功能。

下面是一些常见的参数。

•limit=10:指定返回记录的数量•offset=10:指定返回记录的开始位置。

•pageNumber=2&perSize=100:指定第几页,以及每页的记录数。

•sortby=name&order=asc:指定返回结果按照哪个属性排序,以及排序顺序。

•animal_type_id=1:指定筛选条件参数的设计允许存在冗余,即允许API路径和URL参数偶尔有重复。

比如,GET /zoo/ID/animals 与GET /animals?zoo_id=ID 的含义是相同的注:①移动端能够显示其中一些字段,它们其实不需要一个资源的所有字段,给API消费者一个选择字段的能力,这会降低网络流量,提高API可用性。

②为了将总数发给客户端,使用订制的HTTP头:X-Total-Count.7、状态码(Status Codes)服务器向用户返回的状态码和提示信息,常见的有以下一些(方括号中是该状态码对应的HTTP动词)。

•200 OK - [GET]:服务器成功返回用户请求的数据,该操作是幂等的(Idempotent)。

•201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功。

•202 Accepted - [*]:表示一个请求已经进入后台排队(异步任务)•204 NO CONTENT - [DELETE]:用户删除数据成功。

•400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作,该操作是幂等的。

•401 Unauthorized - [*]:表示用户没有权限(令牌、用户名、密码错误)。

•403 Forbidden - [*]:表示用户得到授权(与401错误相对),但是访问是被禁止的。

•404 NOT FOUND - [*]:用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。

•406 Not Acceptable - [GET]:用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)。

•410 Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。

•422 Unprocesable entity - [POST/PUT/PATCH]:当创建一个对象时,发生一个验证错误。

•500 INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。

8、错误处理(Error handling)如果状态码是4xx,就应该向用户返回出错信息。

尽量使用详细的错误包装信息:{"errors": [{"userMessage": "Sorry, the requested resource does not exist", "internalMessage": "No car found in the database","code": 4xx,"more info": "/api/v1/errors/12345"}]}9、返回结果(Response)服务器返回的数据格式,应该尽量使用JSON,避免使用XML。

针对不同操作,服务器向用户返回的结果应该符合以下规范。

•GET /collection:返回资源对象的列表(数组)•GET /collection/resource:返回单个资源对象•POST /collection:返回新生成的资源对象•PUT /collection/resource:返回完整的资源对象•PATCH /collection/resource:返回完整的资源对象•DELETE /collection/resource:返回一个空文档10、使用HATEOAS的Hypermedia APIRESTful API最好使用Hypermedia as the Engine of Application State(超媒体作为应用状态的引擎),即返回结果中提供链接,连向其他API方法,超文本链接可以建立更好的文本浏览,使得用户不查文档,也知道下一步应该做什么。

比如,当用户向的根目录发出请求,会得到这样一个文档。

{"link": {"rel": "collection https:///zoos","href": "https:///zoos","title": "List of zoos","type": "application/vnd.yourformat+json"}}上面代码表示,文档中有一个link属性,用户读取这个属性就知道下一步该调用什么API了。

相关文档
最新文档