首页 > 其他分享 >RESTful规范 GET请求、POST请求、PUT请求、DELETE请求的使用规范

RESTful规范 GET请求、POST请求、PUT请求、DELETE请求的使用规范

时间:2024-09-13 17:37:10浏览次数:7  
标签:http 请求 GET req 规范 v1 api infos

RESTFUL是一种网络应用程序的设计风格和开发方式,基于HTTP,可以使用XML格式定义或JSON格式定义。RESTFUL适用于移动互联网厂商作为业务使能接口的场景,实现第三方OTT调用移动网络资源的功能,动作类型为新增、变更、删除所调用资源。

RESTFul规范:

一.http动词:

GET(SELECT):从服务器取出资源(一项或多项)

POST(CREATE):在服务器新建一个资源(动作类:无法用http动词表示的)

PUT(UPDATE):在服务器更新资源

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

 

二. 资源:

所谓"资源",就是网络上的一个实体,或者说是网络上的一个具体信息。它可以是一段文本、一张图片、一首歌曲、一种服务,总之就是一个具体的实体。你可以用一个URI(统一资源定位符)指向它,每种资源对应一个特定的URI。要获取这个资源,访问它的URI就可以,因此URI就成了每一个资源的地址或独一无二的识别符。

三.误区:

1.最常见的一种设计错误,就是URI包含动词


RESTful架构中,每个网址代表一种资源(resource),所以网址中不能有动词,只能有名词,而且所用的名词往往与数据库的表格名对应。一般来说,数据库中的表都是同种记录的"集合"(collection),所以API中的名词也应该使用复数。

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

 

2.资源 != 表

如果某些动作是HTTP动词表示不了的,你就应该把动作做成一种资源。比如网上汇款,从账户1向账户2汇款500元,错误的URI是:POST /accounts/1/transfer/500/to/2
正确的写法是把动词transfer改成名词transactions,资源不能是动词,但是可以是一种服务:POST /accounts/transactions HTTP/1.1 from=1&to=2&amount=500.00(动词若没有名词形式,则直接使用动词加s)

四.命名原则:


URI命名通常有三种,驼峰命名法(serverAddress),蛇形命名法(server_address),脊柱命名法(server-address)。由于URL是大小写敏感的,如果用驼峰命名在输入的时候就要求区分大小写,一个是增加输入难度,另外也容易输错,报404。

支付宝用的是蛇形命名法,stackoverflow.com和github.com用的是脊柱命名法:

(例如 https://help.github.com/articles/why-are-my-commits-linked-to-the-wrong-user/#commits-are-not-linked-to-any-user

  和

 (\https://stackoverflow.com/questions/5262224/how-are-reddit-and-hacker-news-ranking-algorithms-used)

 

1.URI命名原则

(1)URI请求采用小写字母,数字,部分特殊符号(非制表符)组成。

(2)URI请求中不采用大小写混合的驼峰命名方式,尽量采用全小写单词,如果需要连接多个单词,则采用连接符“-”连接单词(脊柱命名法)

2. 使用-来让URI可读性更好

3. 使用/来表示资源的层级关系:

曾经Web上的URI都是冰冷的数字或者无意义的字符串,但现在越来越多的网站使用_或-来分隔一些单词,让URI看上去更为人性化。

例如国内比较出名的开源中国社区,它上面的新闻地址就采用这种风格:

如http://www.oschina.net/news/38119/oschina-translate-reward-plan。(我们统一使用-)

4. 避免层级过深的URI(推荐两级)

在url中表达层级,用于 按实体关联关系进行对象导航 ,一般根据id导航。

过深的导航容易导致url膨胀,不易维护,如 GET /zoos/1/areas/3/animals/4 ,尽量使用查询参数代替路径中的实体导航,如 GET/animals?zoo=1&area=3 ;

5. 使用?用来过滤资源

6. 可以用来表示同级资源的关系

五.API规范:


多条件查询:

1.GET /api/版本号/资源s?过滤条件

例如:GET /api/v1/req-infos?过滤条件

http://localhost:8801/api/v1/req-infos?pageNumber=0&pageSize=10&state=2

分页多条件查询需求信息

 

单数据查询:

2.GET /api/版本号/资源s/id

例如:GET /api/v1/req-infos/1

http://localhost:8801/api/v1/req-infos/1

获取id为1的需求信息

 

分组多条件查询:

3.GET /api/版本号/资源s/group/groupColumn1,groupColumn2?过滤条件

例如:GET api/v1/req-infos/group/state?过滤条件

http://localhost:8801/api/v1/req-infos/group/state?source=2

获取根据state分组且source=2的需求列表信息的分组信息

例如:GET api/v1/req-infos/group/state,source?过滤条件

http://localhost:8801/api/v1/req-infos/group/state,source?source=2

获取根据state和source分组且source=2的需求列表信息的分组信息

 

资源保存:

4.POST /api/版本号/资源s

例如:POST /api/v1/req-infos

http://localhost:8801/api/v1/req-infos

新建一条需求信息

 

单数据更新:

6.PUT /api/版本号/资源s/ID

例如:PUT /api/v1/req-infos/1

http://localhost:8801/api/v1/req-infos/1

更新id为1的需求信息

 

根据主键批量更新:

7. PUT /api/v1/req-infos/batch/id1,id2,id3

例如:PUT /api/v1/req-infos/batch/id1,id2,id3

http://localhost:8801/api/v1/req-infos?batch=1,2,3

更新id为1,2,3的需求信息

 

根据除主键外其他字段批量更新:

8. PUT /api/v1/req-infos/batch?过滤条件

例如:PUT /api/v1/req-infos/batch?createDate=2018-04-20

http://localhost:8801/api/v1/req-infos?createDate=2018-04-20

更新createDate为2018-04-20的需求信息

 

单数据删除:

9.DELETE /api/版本号/资源s/ID

例如:DELETE /api/v1/req-infos/1

http://localhost:8801/api/v1/req-infos/1

删除id为1的需求信息

 

根据主键批量删除:

10. DELETE /api/v1/req-infos/batch/id1,id2,id3

例如:DELETE /api/v1/req-infos/batch/id1,id2,id3

http://localhost:8801/api/v1/reqInfos?batch=1,2,3

删除id为1,2,3的需求信息

 

根据除主键外其他字段批量删除:

11. DELETE /api/v1/reqInfos/batch?过滤条件

例如:DELETE /api/v1/reqInfos/batch?createDate=2018-04-20

http://localhost:8801/api/v1/reqInfos?createDate=2018-04-20

更新createDate为2018-04-20的需求信息

 

操作类:

运行一条流水线:

http://localhost:8801/api/v1/pipelines/{id}/runs

终止一条流水线:

http://localhost:8801/api/v1/pipelines/{id}/ends

校验流水线名称:

http://localhost:8801/api/v1/pipelines/validations

下载多个图片:

http://localhost:8801/api/v1/pictures/downloads

下载一个资源:

http://localhost:8801/api/v1/resources/{id}/downloads

六.过滤信息:


如果记录数量很多,服务器不可能都将它们返回给用户。API应该提供参数,过滤返回结果。

下面是一些常见的参数:

?limit=10:指定返回记录的数量

?offset=10:指定返回记录的开始位置。

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

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

?reqTitle=新业务:指定筛选条件

七.状态码:


对于添加(POST)、修改(PUT)这类方法我们需要返回添加或更新后的数据以备前端使用(注意:对前端不关心的数据可以不做返回)

(一般GET请求成功返回200加对象、集合,

POST/PUT请求成功返回201加对象、集合,

DELETE求成功返回204,对于失败的请求代码中暂时不去处理)

 

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 - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。


原文链接:https://blog.csdn.net/qq_38658642/article/details/101016741

标签:http,请求,GET,req,规范,v1,api,infos
From: https://www.cnblogs.com/pingguomang/p/18412612

相关文章

  • 使用 `Roslyn` 分析器和修复器 对异步方法规范化返回Async结尾
    之前写过一篇使用修复器帮助添加头部注释文本的功能,今天使用Roslyn的代码修复器对异步返回方法规范化的功能实现分析器首先需要实现分析器,使用RegisterSyntaxNodeAction,分析所有SyntaxKind.MethodDeclaration的语法类型,[DiagnosticAnalyzer(LanguageNames.CSharp)]public......
  • 《C++编程规范》六、构造、析构与复制
    目录第47条以同样的顺序定义和初始化成员变量使用这些函数之所以需要小心,其中一个原因是几乎一半的情况下编译器都会为我们生成代码。另一个原因是,C++默认时总是将类当作类似于值的类型,但是实际上并非所有的类型都类似于值(见第32条)。知道何时应该显式地编写(或者禁止)这些特殊......
  • 保持使用全局 HttpClient,但确保不同请求的 HttpRequestMessage 独立
    保持使用全局HttpClient,但确保不同请求的HttpRequestMessage独立这是推荐的最佳实践,因为HttpClient是设计为可重用的,你可以使用独立的HttpRequestMessage来确保每个请求有独立的请求头,而不影响其他请求。 privatestaticreadonlyHttpClientclient=newHtt......
  • nvm下载node版本Could not retrieve https://nodejs.org/dist/latest/SHASUMS256.txt.
    1.使用nvm安装node版本的时候报错Couldnotretrievehttps://nodejs.org/dist/latest/SHASUMS256.txt.Get"https://nodejs.org/dist/latest/SHASUMS256.txt":dialtcp104.20.22.46:443:i/otimeout原因:可能是远程连接被关闭的问题,这是由于国内网络限制导致的,解决办法:找到sett......
  • CTF/5/利用python自动请求网页
    最后编辑时间:2024-09-1309:23:09星期五利用python自动请求网页(面向CTF)前置知识:PythonHTMLBurp(或者任何一个你趁手的抓包软件)VSCode(或者任何一个你熟悉的编辑器)浏览器开发者模式(F12)POST请求和GET请求shell/cmd使用搭建web服务器基础为什么我们需要利用python来进......
  • UDS 诊断 - RequestUpload(请求上传)(0x35)服务
    UDS诊断服务系列文章目录诊断和通信管理功能单元UDS诊断-DiagnosticSessionControl(诊断会话控制)(0x10)服务UDS诊断-ECUReset(ECU重置)(0x11)服务UDS诊断-SecurityAccess(安全访问)(0x27)服务UDS诊断-CommunicationControl(通信控制)(0x28)服务UDS诊断-TesterPresent......
  • getchar,scanf的缓冲区输入规则
    #define_CRT_SECURE_NO_WARNINGS#include<stdio.h>intmain(){   //输入   charpossword[20]={0};   printf("请输入密码->");   scanf("%s",possword);   //scanf读取数据时,在空格处停止   //刷新   intch=0;   while......
  • CloudEvents-云原生事件规范
    前言在微服务-分布式架构中异步任务:用于降低接口时延或削峰,提升用户体验,降低系统并发压力;通知类RPC:用于微服务间状态变更,用户行为的联动等场景;以上2种场景,都十分适合使用事件驱动来实现。事件总线事件总线是对发布-订阅模式的一种实现。它是1种集中式事件处理机制,允许不......
  • 影像活动分享:高分辨率影像数据0元Get!速来!
    想要一张项目所需的卫星影像去哪选购?有卫星影像需求的小伙伴们可算是赶上福利啦!即日起至9月30日,在星图地球今日影像平台下单所需影像数据,参与活动即有机会0元购买!心动不如行动~活动参与方式:1、通过专属链接进入今日影像PC端官网https://daily.geovisearth.com/?zslj=yhfzb......
  • Java成神之路-踩坑篇: SpringBoot2.7.0版本整合Swagger3.0.0。解决:项目启动报错与swa
    话不多说先上报错信息Causedby:java.lang.NullPointerException:null atspringfox.documentation.spring.web.WebMvcPatternsRequestConditionWrapper.getPatterns(WebMvcPatternsRequestConditionWrapper.java:56)~[springfox-spring-webmvc-3.0.0.jar:3.0.0] atspri......