多平台统一管理软件接口,如何实现多平台统一管理软件接口
415
2023-03-11
本文目录一览:
本文编写目restful接口开发的是为了尽可能的约定好一个公司的产品、组件、项目开发的RESTful API 设计风格restful接口开发,使不同团队间设计的API风格尽量一致restful接口开发,减少项目后期由于规范问题或设计不足导致的接口重构造成的开发、测试返工。最终让接口的最终使用者能够在开发过程中有个良好的体验。
此约定可作为开发人员设计RESTful 接口或项目接口发布评审的参考。
个人观点restful接口开发:用了 JSON-RPC 不等于 是RESTful API ,RESTful API通常是基于HTTP/JSON方式实现的 ,两种方式的API设计方式都不错,项目中选适合的就好。简单对比如下:
本文仅是作者个人根据主观喜好和接口设计经验搜罗总结而来的RESTful API设计约定,仅作为接口设计的基本要求,也欢迎与大家讨论。此约定未涉及超文本HATEOAS相关内容,也不包含RPC类面向后端服务方法映射接口的范畴。
API 是后端应用程序的脸面(UI),用户体验非常重要。尤其是当你开发的是一个可复用的组件或产品,如果API设计有些许瑕疵,会直接影响开发者的体验,设计者会被骂的…… 有问题的API一旦开放出去了,哪怕是简单的拼写错误,由于要保持兼容性不能删改,会成为技术欠债长期背下去。
以上关键点不只适用于RESTful API,其restful接口开发他类型API也是一样的。
作为对外公开发布的RESTful API,根URL中一般要有域名与版本信息。通常一个WEB站点会同时提供网站服务和API服务,我们需要根据URL能够区分出访问的是服务接口还是网站中的网页、文件等资源。因此RESTful API的根URL中根据不同场景一般会在一级域名中或者是子域名中带api关键字。
常见的两种根URL用法如下:
推荐的方案是根URL中采用子域名的方式区分API,即: https://iam.primeton.com/api/v1/*
路径终点即粗体部分内容: https:// example.org/api/v1/ menus
设计RESTful API时常用的HTTP Method包括:GET、POST、PUT、PATCH、DELETE 简单说明如下:
根据资源标识可以 唯一定位一个资源 时,建议使用URL路径参数方式传递。对应Springboot 的 @PathVariable 。API Path示例如下:
根据资源属性查询过滤 一或多个资源 时,建议使用URL查询参数方式传递。对应Springboot的 @RequestParam 。API Path示例如下:
对于简单查询类接口,可以使用路径参数和查询参数解决,如果是复杂功能型查询接口中需要通过复杂的过滤条件查询时如: < in between 等等,查询参数用起来会非常痛苦,GET Method又不支持提交Request Body参数。因此我建议这种 复杂型查询采用POST Method 提交到一个特定的Path上 。参见如下场景:
查询接口返回多个数据时,需要支持分页(枚举类数据或少量数据除外)和排序。
如需使用分页查询和排序,建议统一请求与响应报文结构,格式如下:
请求参数示例:
GET /users?page=1size=5sort=username
单页数据响应结果示例:
上述分页排序与响应报文格式是来自Spring Data定义的模型,为了保持分页排序接口相关的使用习惯,如果持久化不使用JPA,仍然建议采用上述规范的报文定义封装接口。为使用者提供一致的体验。
如果资源需要做一些增删改之外的操作(如状态变更),可以用 /actions 作为path
例如:流程平台中的流程实例会有状态变化,如启动、挂起、恢复、终止等等,这种接口建议这样设计:
组合资源,即两种资源之间存在组合关系,组合指整体与部分的强包含关系,但整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束。对"部分"的操作一定会由整体作为入口,不会直接跳过"整体"来对"部分"做增删改查。这种组合场景中,推荐API设计方式示例如下:
聚合资源,即两种资源之间存在聚合关系。聚合也是整体与部分的弱包含关系,但整体与部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个不同的主体对象,也可以为多个整体对象共享。
例如,机构或角色下包含人员,需要获取机构或角色下的人员的场景,避免做成分别通过机构入口或角色入口找人等重复的具有类似功能的接口:
在RESTful API设计中,正常和异常情况建议通过HTTP约定的status进行区分, 不建议 采用所有接口均POST Method调用,永远返回200这种模式。
推荐的常用Http Status说明如下:
HTTP 1.0 Status 详细说明参考
API调用成功后,返回HTTP 2xx状态码,Response Body直接返回业务数据即可。请求和响应报文建议统一采用JSON格式。
RESTful API 对于异常报文需要规范和统一,服务端出现异常情况下,需要进行全局拦截,然后将异常信息封装为规范的格式,返回给调用端。
对于后端的异常信息,建议包含编码和消息
本文是基于学习各路大神们对RESTful 设计相关文章,结合自己设计接口时遇到困惑后的解决方案,收集与总结而成的RESTful API设计约定。部分内容夹杂个人喜好与主观观点,抛砖引玉,希望能为大家设计API带来些许帮助。后如果遇到一些更复杂的场景,欢迎一起沟通。
我们现实生活中的协议是指相互遵守的规定,单方面违背,协议不成立。
而在互联网交互的过程中,也存在这许多协议,例如 FTP、HTTP、STMP、TCP/IP 等。
而 HTTP 协议则是 web 服务器 和 web 客户端 达成的一种可靠的数据传输协议,通过 HTTP 可以从遍布全世界的 Web 服务器上将 JPEG 图片,HTML 页面,文本文件,MPEG 电影,WAV 音频文件和其他资源信息块迅速、便捷、可靠地搬移到人们桌面上的 Web 浏览器上去。它能够确保数据在传输的过程当中不会损坏或者产生混乱。这样,对用户来说是个好事,同样对 Internet 应用的开发人员来说也是一件好事。因为我们在开发过程中也不需要担心自己的页面和数据会在传输过程中发生破坏和畸变了。
Web 内容都是 存储在 Web 服务器 上的。Web 服务器所使用的是 HTTP 协议,因此经常会被称为 HTTP 服务器。这些 HTTP 服务器存储了因特网中的数据,如果 HTTP 客户端发出请求的话,它们会提供数据。客户端向服务器发送 HTTP 请求,服务器会在 HTTP 响应中回送所请求的数据。
那么一次请求和响应的过程中发生了什么?
web 服务器是 web 资源的宿主 ,而 web 资源就是我们常见的 web 内容的源头,最简单的 web 资源就是我们服务器中的静态文件:文本文件,HTML 文档,JPEG 图片文件,AVI 文件等等。
当然 web 资源也可以是动态生成的,类似搜索引擎生成的页面,QQ 空间的动态等,总之,所有类型的内容来源都是资源。
因特网上有数千种不同类型的数据类型,HTTP 在传输的过程中为每个传输的数据都打上了名为 MIME 类型的数据类型标签,描述并标记多媒体内容。
web 浏览器请求一个网站的时候往往会发布 多个 HTTP 请求 ,比如我们在浏览一个具有丰富图片的的 web 页面的时候,浏览器会执行一次 HTTP 请求来获取描述页面布局的 HTML,然后发布另外的请求来获取每个嵌入式的图片,这些图片甚至可能位于不同的服务器上。因此,一个 web 页面通常不是单个资源,而是一组资源的集合。
web 服务器会为所有的 HTTP 对象数据附加一个 MIME 类型 ,当浏览器从服务器中取回一个对象的时候,会查看相关的 MIME 类型。看看它是否知道应该如何处理这个对象。对象的类型写在响应的 content-type 头 中;同样,请求的时候浏览器也会告知服务器请求数据类型。
常见的 MIME 类型:
以 application 开头的媒体格式类型:
MIME 参考手册: W3school MINE类型
大部分 URL 都遵循一种标准格式, 这种格式包含三个部分。
URI = Uniform Resource Identifier 统一资源 标志符
URL = Uniform Resource Locator 统一资源 定位符
URN = Uniform Resource Name 统一资源 名称
翻译成人话: URI 是抽象的定义,不管用什么方法表示,只要能定位一个资源,就叫 URI,本来设想的的使用两种方法定位。
1)URL 用地址定位
2)URN 用名称定位
举个例子:去村子找个具体的人(URI)。如果用地址:某村多少号房子第几间房的主人就是 URL, 如果用身份证号 + 名字,去找就是 URN 了。
目前 WEB 上就 URL 流行开了,平常见得 URI 基本都是 URL。
1)HTTP 和 HTTPS 的相同点
2)HTTP 和 HTTPS 的不同之处
3)如何选择 HTTP 和 HTTPS 协议
HTTP 支持几种不同请求和命令,这些命令被称为 HTTP 方法,每条 HTTP 请求报文都包含一个方法。 这个方法会告诉服务器要执行什么动作(获取一个 Web 页面、发送一段信息、删除一个文件等)。
请求方法如下:
状态码分成如下几个系列:
常见的 HTTP 状态码:
从 Web 客户端发往 Web 服务器的 HTTP 报文称为请求报文(request message)。从服务器发往客户端的报文称为响应报文(response message)。
HTTP 报文包括以下三个部分:
以上内容复制自: http://www.cnblogs.com/Joans/p/3956490.html
使用火狐和 chrome 浏览器打开一个网页,找到其中一个网络请求查看报文。
1)协议
2)域名
3)接口版本控制规范
格式规范如下:
更新版本后可以使用 v2、v3 等依次递加。
4)接口路径规范
格式规范如下:
5)接口命名规范
格式规范如下:
6) HTTP 请求方法
格式规范如下:
GET https://api.xxxxx.com/v1/zoos :列出所有动物园
POST https://api.xxxxx.com/v1/zoos :新建一个动物园
GET https://api.xxxxx.com/v1/zoos/ID :获取某个指定动物园的信息
PUT https://api.xxxxx.com/v1/zoos/ID :更新某个指定动物园的信息(提供该动物园的全部信息)
PATCH https://api.xxxxx.com/v1/zoos/ID :更新某个指定动物园的信息(提供该动物园的部分信息)
DELETE https://api.xxxxx.com/v1/zoos/ID :删除某个动物园
GET https://api.xxxxx.com/v1/zoos/ID/animals :列出某个指定动物园的所有动物
DELETE https://api.xxxxx.com/v1/zoos/ID/animals/ID :删除某个指定动物园的指定动物
注意:修改有两个方法 PUT 和 PATCH。
假设 URL 位置有一组数据 UserInfo,包括 UserID、UserName 等 20 个字段
需求:用户修改了 UserName,其他不变
• 采用 PATCH,仅向 URL 提交 UserName 的局部更新请求
• 采用 PUT,必须将所有 20 个字段一并提交到 URL,未提交字段被删除
PATCH 的最主要好处:节省网络带宽
7)接口信息过滤
格式规范如下:
?limit=10:指定返回记录的数量
?offset=10:指定返回记录的开始位置。
?page=2per_page=100:指定第几页,以及每页的记录数。
?sortby=nameorder=asc:指定返回结果按照哪个属性排序,以及排序顺序。
?animal_type_id=1:指定筛选条件
参数的设计允许存在冗余,即允许 API 路径和 URL 参数偶尔有重复。比如, GET /zoo/ID/animals 与 GET /animals?zoo_id=ID 的含义是相同的。
8)请求参数规范
9)接口返回数据
格式规范如下:
status::接口的执行状态
data:接口的主数据
msg:返回成功或者失败的错误信息
返回数据中的状态码、状态信息,常指具体的业务状态,不建议和 HTTP 状态码混在一起。HTTP 状态,是用来体现 HTTP链路状态情况,如:404-Not Found。HTTP 状态码和 JSON 结果中的状态码,并存尚可,用于体现不同维度的状态。
简单的功能如下:
这里不牵扯到任何 Python 和 Pycharm 的教学,不会的童鞋挪步 Python 开发教程。
参考新浪开放平台 https://open.weibo.com ,基本是国内最为标准的 API 文档之一。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~