RESTFUL如何指导WEB API设计?

  博主刚刚接触web开发的时候,写了一个接口 /get_article_info/1 获取id为1的这篇文章的内容,被前辈们看见了,前辈给我说我这个接口设计的不太好啊,不符合RESTFUL规范,当前辈们说出这些话的时候,我很迷惑,我写的接口不能够好好工作吗?能够正常返回内容啊,对于不存在的文章也能够在返回的内容体中提示不存在,而且接口的意思很明确,一看就能明白,这还有什么不好的地方吗?

一、RESTFUL是什么?

  RESTFUL是英文单词Representational State Transfer的缩写,翻译成中文就是表现层状态转化,什么是表现层?什么是状态?什么是转化?

  表现层可以理解为一种资源,可以是一篇文章,一张图片,一个订单...... 所有网络上的一个实体,都可以说是一个资源,而URL就是这个唯一资源的定位符,状态和转化应该连在一起理解,这是一个动作,即状态变化,可以是新建,删除,更新,获取,比如新建一篇文章,删除一篇文章,更新文章内容,获取文章内容。HTTP协议应当如何表示这种变化?HTTP协议中有四个操作方法,可以用来表示,GET表示获取,POST表示新建,DELETE表示删除,PUT表示更新。

  综上,RESTFUL可以通俗的理解通过HTTP协议的动词和URL对一个资源进行各种操作,实现表现层状态转化。

二、 RESTFUL如何指导我们设计API?

核心思想就是HTTP动词 + URL资源,比如获取文章信息 GET /articles, GET是动词,/articles 是名词

1. 动词通常是HTTP的方法

GET:    获取信息
POST:   新建信息
DELETE: 删除信息
PUT:    更新信息

2. 资源必须是名词

已经有了HTTP的方法的动词,URL中,我们就没有必要使用动词了

POST /create_articles
POST /delete_articles
POST /update_articles   

上面都是不好的用法,我们应当使用下面这种用法

POST    /articles
DELETE  /articles/2
PUT     /articles/2

3. 资源最好使用名词的复数,任何情况下都能够适用

/airticles/1  获取id为1的文章内容
/airticles    获取所有文章内容
# 使用单数
/article  获取一篇文章内容?还是所有的文章内容?

4. 避免多级URL

/authors/5/airticles  获取作者id为5的所有文章
上面换成这种形式更好,也利于扩展
/airticles?author_id=5

5. 利用querystring来过滤和筛选

一般情况下一个url很难满足复杂多变的情况,比如分页,过滤,这时候我们应当如何设计?

/airticles/published  这种形式?

不不不,published不是一个资源,而且这种url不宜于扩展

最佳实践应当是下面这种形式

/articles?page=1          获取第一页的文章
/articles?published=true  获取已经发布的文章

6. 返回有意义的状态码

HTTP有很多状态码,表示不同的意义,我们应当充分利用这些状态码

尤其是出现错误时,不要返回200,意义很不明确

一般成功请求后返回的状态码

GET:200 OK
POST:201 Created
PUT:200 OK
DELETE:204 No Content

其他状态码信息

1xx:相关信息

2xx:请求成功

3xx:重定向

4xx:客户端错误

5xx:服务器端错误

2xx状态码表示成功

200 OK 请求成功

201 Created 请求成功,并创建了资源

202 Accepted 请求接受,但未处理完成,一般用于异步处理

204 No Content 请求处理成功,但未返回内容,一般用于DELETE请求成功

3xx状态码表示重定向

301 Moved Permanently 永久重定向

302 Found 暂时重定向

4xx状态码表示客户端错误

400 Bad Request 错误请求,服务器不理解请求,没做任何处理

401 Unauthorized 未认证

403 Forbidden 用户通过了认证,但是没有权限

404 Not Found 没有发现请求的内容

405 Method Not Allowed 不允许的请求方法

5xx状态码表示服务端错误

500 Internal Server Error 服务器内部错误,无法完成请求

503 Service Unavailable 服务不可用

三、总结

  RESTFUL就是一种规范,我们不遵循这种规范也能够写出可用的代码,但是遵循这种规范却能给我们带来更多的好处,API设计更加可读,与其他人交流也能够很方便。现在让我看看我刚刚接触web接口开发时的设计,真的是不太好啊,URL信息太重复,错误的返回状态不明确,全是200。

参考文章:https://blog.florimond.dev/restful-api-design-13-best-practices-to-make-your-users-happy

rear

原文地址:https://www.cnblogs.com/time-read/p/10895794.html

时间: 2024-08-29 14:10:45

RESTFUL如何指导WEB API设计?的相关文章

Web API 设计摘要

近期读了一本微电子书 Brian Mulloy 所著<Web API Design>感觉颇多收获,特对其内容做了个整理摘要以便回想其观点精华以指导日常工作中的设计思路. 本文主要讲述 Web API 设计,追求一种更务实的 REST 风格. 正如作者所说 REST 是一种架构风格,而非严格的标准,不是必需在形式定义上去做过多真论,究竟什么才是真正的 REST? 设计的目的是为了表达某样东西是怎样使用的,那么 API 设计的成功与否是由开发者是否可以高速上手并用的愉快. 以下讲述了 Web AP

WebApi系列~基于RESTful标准的Web Api

WebApi系列~基于RESTful标准的Web Api 回到目录 微软的web api是在vs2012上的mvc4项目绑定发行的,它提出的web api是完全基于RESTful标准的,完全不同于之前的(同是SOAP协议的)wcf和webService,它是简单,代码可读性强的,上手快的,如果要拿它和web服务相比,我会说,它的接口更标准,更清晰,没有混乱的方法名称,有的只有几种标准的请求,如get,post,put,delete等,它们分别对应的几个操作,下面讲一下: GET:生到数据列表(默

Web API设计方法论--比较完整的web api 开发过程

为Web设计.实现和维护API不仅仅是一项挑战:对很多公司来说,这是一项势在必行的任务.本系列将带领读者走过一段旅程,从为API确定业务用例到设计方法论,解决实现难题,并从长远的角度看待在Web上维护公共API.沿途将会有对有影响力的人物的访谈,甚至还有API及相关主题的推荐阅读清单. 这篇 InfoQ文章是 Web API从开始到结束系列文章中的一篇.你可以在这里进行订阅,以便能在有新文章发布时收到通知. 设计Web API不止是URL.HTTP状态码.头信息和有效负载.设计的过程--基本上是

Asp.net Web Api 设计

目录 Asp.net Web Api 设计[持续更新] 第一部分 基础知识 第一章 因特网.万维网和HTTP协议 1.1 Web体系结构 第二章 Web Api 2.1 什么是Web Api 2.6 Web Api 指南 第三章 Asp.Net Web Api Asp.net Web Api 设计[持续更新] 第一部分 基础知识 第一章 因特网.万维网和HTTP协议 1.1 Web体系结构 Web体系有三个核心概念:资源 .URL和表示.一个资源由一个URI进行标识,而HTTP客户端使用URI就

Web API设计经验与总结

在移动互联网的时代, Web服务已经成为了异构系统之间的互联与集成的主要手段,各种 Web服务几乎都采用REST风格的Web Api来构建. 通过Http协议的形式来. 以Get/Post方式发送请求, 返回json格式(数据更小巧且自描述能力强)的数据.这里就不在介绍REST API 的好处和不足.这些网上一大堆资料.今天就说说,如何构建优秀的REST API ? 目前,各大互联网公司, 对自身的REST Api设计有各自的标准,他们的Api 的设计也非常成熟. 那么,我们应该如何更好的设计我

基于RESTful标准的Web Api

微软的web api是在vs2012上的mvc4项目绑定发行的,它提出的web api是完全基于RESTful标准的,完全不同于之前的(同是SOAP协议的)wcf和webService,它是简单,代码可读性强的,上手快的,如果要拿它和web服务相比,我会说,它的接口更标准,更清晰,没有混乱的方法名称,有的只有几种标准的请求,如get,post,put,delete等,它们分别对应的几个操作,下面讲一下: GET:生到数据列表(默认),或者得到一条实体数据 POST:添加服务端添加一条记录,记录实

如何设计出优美的Web API?

1. 概述 WEB API的应用场景非常丰富,例如:将已有系统的功能或数据开放给合作伙伴或生态圈:对外发布可嵌入到其他网页的微件:构建前后端分离的WEB应用:开发跨不同终端的移动应用:集成公司内部不同系统等等.在上述场景里,你可能是WEB API的使用者,也可能是设计者,但你知道如何评判WEB API的优劣吗? 2. 评判标准 我们可以从三个维度来评判一个WEB API的优劣: 易于使用:WEB API的用户是程序还是人?我觉得首先是人,然后是程序.为什么这么说呢?是否采用某个WEB API的决

How ASP.NET Web API 2.0 Works?[持续更新中…]

一.概述 RESTful Web API [Web标准篇]RESTful Web API [设计篇] 在一个空ASP.NET Web项目上创建一个ASP.NET Web API 2.0应用 二.路由 ASP.NET的路由系统:URL与物理文件的分离 ASP.NET的路由系统:路由映射 ASP.NET的路由系统:根据路由规则生成URL ASP.NET Web API路由系统的几个核心类型 Web Host下的URL路由 三.消息处理管道 ASP.NET Web API标准的"管道式"设计

使用OWIN 构建自宿主ASP.NET Web API 2

--Use OWIN to Self-Host ASP.NET Web API 2 原文链接:http://www.asp.net/web-api/overview/hosting-aspnet-web-api/use-owin-to-self-host-web-api 摘要:ASP.NET Web API 2拥有符合RESTFUL风格,原生支持HTML协议,解耦IIS和windows server服务器等诸多优秀特性.本文讲述如何使用OWIN构建ASP.NET Web API 2.在翻译的基础