专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

API接口设计规范,看这篇就足以了

  优秀的设计是产品变得卓越的原因。设计API意味着提供有效的接口,可以帮助API使用者更好地了解、使用和集成,同时帮助人们有效地维护它。每个产品都需要使用手册,API也不例外。
  在API领域,可以将设计视为服务器和客户端之间的协议进行建模。API协议可以帮助内部和外部的利益相关者理解应该做什么,以及如何更好地协同工作来构建一个出色的API。一、API接口1。什么是API接口
  应用程序编程接口(ApplicationProgrammingInterface,API接口),是应用程序重要的组成部分,就是应用程序对外提供了一个操作数据的入口,这个入口可以是一个函数或类方法,也可以是一个url地址或者一个网络地址。当客户端调用这个入口,应用程序则会执行对应代码操作,给客户端完成相对应的功能。2。API接口类型
  目前市面上大部分公司开发人员使用的接口实现规范主要有:Restful、RPC。
  RPC(RemoteProcedureCall):翻译成中文:远程过程调用〔远程服务调用〕。从字面上理解就是访问调用远程服务端提供的api接口。这种接口一般以服务或者过程式代码提供。服务端提供一个唯一的访问入口地址:http:api。xxx。com或http:www。xx。comapi客户端请求服务端的时候,所有的操作都理解为动作,一般web开发时,对应的就是HTTP请求的post请求通过请求体参数,指定要调用的接口名称和接口所需的参数
  actiongetallstudentclass301sex1mgetallstudentsex1age22command100sex1age22
  接口多了,对应函数名和参数就多了,前端在请求api接口时难找。容易出现重复的接口
  Restful:翻译成中文:资源状态转换。(表征性状态转移)
  把服务端提供的所有的数据文件都看成资源,那么通过api接口请求数据的操作,本质上来说就是对资源的操作了。
  因此,Restful中要求,我们把当前接口对外提供哪种资源进行操作,就把资源的名称写在url地址。
  web开发中操作资源,最常见的最通用的无非就是增删查改,所以restful要求在地址栏中声明要操作的资源是什么。然后通过http请求动词来说明对该资源进行哪一种操作。
  POSThttp:www。xxx。comapistudents添加学生数据
  GEThttp:www。xxx。comapistudents获取所有学生
  DELETEhttp:www。xxx。comapistudents删除idpk的一个学生
  PUThttp:www。xxx。comapistudents修改一个学生的全部信息〔id,name,sex,age,〕
  PATCHhttp:www。xxx。comapistudents修改一个学生的部分信息〔age〕
  也就是说,我们仅需要通过url地址上的资源名称结合HTTP请求动作,就可以说明当前api接口的功能是什么了。
  Restful是以资源为主的api接口规范,体现在地址上就是资源就是以名词表达。
  RPC则以动作为主的api接口规范,体现在接口名称上往往附带操作数据的动作。3。为什么要编写接口文档
  为了在团队内部形成共识、防止个人习惯差异引起的混乱,我们都需要找到一种大家都觉得很好的接口实现规范,而且这种规范能够让后端写的接口,用途一目了然,减少客户端和服务端双方之间的合作成本。
  由于接口所包含的内容比较细,在项目中常常需要使用接口文档。研发人员可以根据接口文档进行开发、协作,测试人员可以根据接口文档进行测试,系统也需要参照接口文档进行维护等。二、API接口规范1。协议
  API与客户端用户的通信协议,推荐使用HTTPS协议,同时兼容HTTP,以确保交互数据的传输安全。2。域名
  应该尽量将API部署在专用域名之下。
  https:api。xxx。com
  如果确定API很简单,不会有进一步扩展,可以考虑放在主域名下。
  https:www。xxx。comapi3。版本(Versioning)
  推荐将API的版本号放入URL。
  https:api。xxx。comappv1。0foo
  https:api。xxx。comappv1。1foo
  https:api。xxx。comappv2。0foo
  另一种做法是,将版本号放在HTTP头信息中,但不如放入URL方便和直观。
  版本号规范:
  1)采用多版本并存,增量发布的方式。
  2)版本号可以分为整型和浮点型
  整型:大功能版本,如v1、v2、v3。。。
  浮点型:补充功能版本,如v1。1、v1。2、v2。1、v2。2。。。
  关于版本兼容性,小版本变化向下兼容的,只要大版本不变化。
  3)对于一个API或服务,应在生产中最多保留3个最详细的版本4。路径(Endpoint)
  路径又称终点(endpoint),表示API的具体网址,每个网址代表一种资源(resource)
  接口命名应该是一个动宾结构,由动词名词组成,采取驼峰式命名规范,例如:
  productv1。0getProducts获取产品
  orderv1。1saveOrder保存订单
  接口命名常见通用动词可以参考如下:
  动作
  前缀
  备注
  获取
  get
  get{XXX}
  获取
  get
  get{XXX}List
  新增
  add
  add{XXX}
  修改
  update
  update{XXX}
  保存
  save
  save{XXX}
  删除
  delete
  delete{XXX}
  上传
  upload
  upload{XXX}
  发送
  send
  send{XXX}
  5。基本规范5。1请求参数
  公共参数是每个接口都要携带的参数,描述每个接口的基本信息,用于统计或其他用途,放在header或url参数中。
  Query
  url?后面的参数,存放请求接口的参数数据。
  Header
  请求头,存放以下公共参数、APP端公共参数等,也可以存放一些特殊加密字段。
  Body
  Body体,存放请求接口的参数数据。公共参数:
  参数
  说明
  备注
  appid
  唯一标识用户ID
  appid是全局唯一的,每个appid将对应一个客户
  appkey
  加密key
  appkey用于参数签名使用,可以理解为加密盐值,注意appkey保存到客户端,不需要作为参数传递,需要做一些安全处理,防止泄露。
  timestamp
  时间戳
  时间戳,是客户端调用接口时对应的当前时间戳,时间戳用于防止DoS攻击。当黑客劫持了请求的url去DoS攻击,每次调用接口时接口都会判断服务器当前系统时间和接口中传的的timestamp的差值,如果这个差值超过某个设置的时间(假如5分钟),那么这个请求将被拦截掉,如果在设置的超时时间范围内,是不能阻止DoS攻击的。timestamp机制只能减轻DoS攻击的时间,缩短攻击时间。如果黑客修改了时间戳的值可通过sign签名机制来处理。
  requestid
  请求ID
  用户请求ID,是客户端随机生成的值,要保证全局唯一,可以参考snowflake算法,作为参数传递过来,增加requestid的目的是一方面增加sign签名的多变性,另一方面主要用于防重放攻击,还可以作为全链路跟踪排查问题手段。
  sign
  签名
  一般用于参数签名,防止参数被非法篡改,最常见的是修改金额等重要敏感参数,sign的值一般是将所有非空参数按照升续排序然后tokenappkeytimestamprequestid拼接在一起,然后使用某种加密算法进行加密,作为接口中的一个参数sign来传递,也可以将sign放到请求头中。接口在网络传输过程中如果被黑客挟持,并修改其中的参数值,然后再继续调用接口,虽然参数的值被修改了,但是因为黑客不知道sign是如何计算出来的,不知道sign都有哪些值构成,不知道以怎样的顺序拼接在一起的,最重要的是不知道签名字符串中的appkey是什么,所以黑客可以篡改参数的值,但没法修改sign的值,当服务器调用接口前会按照sign的规则重新计算出sign的值然后和接口传递的sign参数的值做比较,如果相等表示参数值没有被篡改,如果不等,表示参数被非法篡改了,就不执行接口了。
  token
  系统调用的唯一凭证访问令牌accesstoken,用于接口中,用于标识接口调用者的身份、凭证,减少用户名和密码的传输次数。一般情况下客户端(接口调用方)需要先向服务器端申请一个接口调用的账号,服务器会给出一个appid和一个appkey,appkey用于参数签名使用,注意appkey保存到客户端,需要做一些安全处理,防止泄露。
  Token的值一般是UUID,服务端生成Token后需要将token做为key,将一些和token关联的信息作为value保存到缓存服务器中(redis),当一个请求过来后,服务器就去缓存服务器中查询这个Token是否存在,存在则调用接口,不存在返回接口错误,一般通过拦截器或者过滤器来实现。
  一般token、timestamp、requestid和sign四个参数会在接口中会同时作为参数传递,每个参数都有各自的用途,其中首次获取token需要appid、timestamp、requestid、sign,客户端获取token后不再需要传递appid。APP端请求公共参数
  APP端请求参数除了上述公共参数外,还需要以下额外公共参数:
  参数
  说明
  备注
  network
  网络
  WIFI、4G
  operator
  运营商
  中国联通移动
  platform
  平台
  iOS、Android
  system
  系统
  ios13。3、android9
  device
  设备型号
  iPhoneXR、小米9
  udid
  设备唯一标示
  过滤参数:
  若记录数量很多,服务器不可能返回全部记录给用户。
  API应该提供分页参数及其它筛选参数,过滤返回结果。
  参数示例如下
  limit10:指定返回记录的数量
  offset10:指定返回记录的开始位置。
  page2perpage100:指定第几页,以及每页的记录数。
  sortbynameorderasc:指定返回结果按照哪个属性排序,以及排序顺序。注意:
  1)上传下载
  上传下载,参数增加文件md5,用于完整性校验(传输过程可能丢失数据)。
  2)避免精度丢失
  缩小单位保存数据,如:钱以分为单位、距离以米为单位。5。2响应数据
  为了方便给客户端响应,响应数据会包含三个属性,状态码(code),信息描述(message),响应数据(data)。客户端根据状态码及信息描述可快速知道接口,如果状态码返回成功,再开始处理数据。
  array类型数据。通过list字段,保证data的Object结构。
  返回示例:
  {code:SUCCESS,返回码,详情后面的【接口返回码】部分会说data:{},数据message:成功存放响应信息提示,显示给客户端用户【须语义化中文提示】}
  分页类型数据。返回总条数,用于判断是否可以加载更多。
  返回示例:{code:SUCCESS,data:{list:〔〕total:10},数据,message:成功}
  响应状态码code统一使用英文组合字符串,多层分级使用。分隔,例如:
  PARAMETER。ILLEGALL
  PARAMETER。ILLEGALL代表参数错误,不推荐使用数字,数字错误码可读性太差。
  注意:
  1)返回属性名命名时,建议使用驼峰命名,首字母小写。
  2)返回属性值为空时,严格按类型返回默认值。
  3)返回金额类型时间日期类型的属性值,如果仅用来显示,建议后端返回可以显示的字符串。
  4)返回业务逻辑的状态码和对应的文案,建议后端两者都返回,中间添加分隔,例如SUCCESS成功,SUCCESS表示接口状态成功,显示给客户表示成功。
  5)调用方不需要的属性,不要返回。5。3使用GETPOST作为接口请求方式
  一般调用接口最常用的两种方式就是GET和POST。两者的区别也很明显,GET请求会将参数暴露在浏览器URL中,而且对长度也有限制。为了更高的安全性,所有接口都采用POST方式请求。
  另外不推荐使用rest的PUT和DELETE,因为很多浏览器不支持,很多框架也不支持。
  我们这里用的的GET和POST同RESTFul中的GET、POST是不一样的。通常使用GET、POST的选择点在于,简单的用GET、复杂对象用POST,并没有动作的含义,例如我也可以使用get来执行添加的动作,如果参数很多,我也可以使用POST来执行查询操作;但在REST里,GET对应的是查询一个资源,而POST对应的是新增一个资源,意义是决然不同的。理解这一点非常重要。5。4返回格式
  返回响应数据采用JSON,不推荐使用XML,XML是W3C为了替换HTML研发出来的,但是现在很明显失败了。
  默认情况下要支持gzip三、接口安全规范3。1安全设计规范
  获取token一般会涉及到几个参数appid,appkey,timestamp,requestid,sign。我们通过以上几个参数来获取调用系统的凭证。appid和appkey可以直接通过平台线上申请,也可以线下直接颁发。appid是全局唯一的,每个appid将对应一个客户,appkey需要客户端高度保密。timestamp是时间戳,使用系统当前的unix时间戳。时间戳的目的就是为了减轻DDOS的攻击。防止请求被拦截后一直尝试请求接口。服务器端设置时间戳阀值,如果请求时间戳和服务器时间超过阀值,则响应失败。requestid是随机值。随机值主要是为了增加sign的多变性,也可以保护接口的幂等性,相邻的两次请求reqeustid不允许重复,如果重复则认为是重复提交,响应失败。sign是参数签名,将所有非空参数按照升续排序、appkey、timestamp、reqeustid拼接起来进行md5加密(当然使用其他方式进行不可逆加密也没问题)。
  token作为系统调用的唯一凭证,token可以设置一次有效,也可以设置时效性,这里推荐设置时效性。如果一次有效的话这个接口的请求频率可能会很高。token推荐加到请求头上,这样可以跟业务参数完全区分开来。
  这里面主要涉及到sign签名设计规范和token生成规范,需要遵守如上规范,能够保证API接口的安全性和幂等性。3。2客户端IP白名单
  ip白名单是指将接口的访问权限对部分ip进行开放。这样就能避免其他ip进行访问,设置ip白名单比较麻烦的一点就是当你的客户端进行迁移后,就需要重新联系服务提供者添加新的ip白名单。设置ip白名单的方式很多,除了传统的防火墙之外,springcloudalibaba提供的组件sentinel也支持白名单设置。为了降低api的复杂度,推荐使用防火墙规则进行白名单设置或者在API网关层面设置IP白名单,比如shenyu网关支持IP白名单设置。3。3单个接口针对ip限流
  限流是为了更好的维护系统稳定性。使用redis进行接口调用次数统计,ip接口地址作为key,访问次数作为value,每次请求value1,设置过期时长来限制接口的调用频率。
  不过这里还是推荐在网关层面进行设置,比如shenyu网关支持IP限流。3。4敏感数据加密与脱敏
  参数安全:
  登录密码、支付密码,需加密后传输,建议使用非对称加密
  响应结果:
  用户手机号、用户邮箱、身份证号、支付账号、邮寄地址等要进行脱敏,部分数据加号处理。
  在接口调用过程中数据通常需要脱敏安全处理,最常用的方式就是加密。加密方式使用安全性比较高的RSA非对称加密。非对称加密算法有两个密钥,这两个密钥完全不同但又完全匹配。只有使用匹配的一对公钥和私钥,才能完成对明文的加密和解密过程。四、API接口幂等性
  幂等性是指任意多次请求的执行结果和一次请求的执行结果所产生的影响相同。说的直白一点就是查询操作无论查询多少次都不会影响数据本身,因此查询操作本身就是幂等的。但是新增操作,每执行一次数据库就会发生变化,所以它是非幂等的。
  我们无法保证接口的每一次调用都是有返回结果的,要考虑到出现网络异常的情况。
  举个例子,订单创建时,我们需要去减库存,这时接口发生了超时,调用方进行了重试,这时是否会多扣一次库存?
  对于一些重要的操作需要防止客户端重复提交的(如非幂等性重要操作),具体办法是当请求第一次提交时将requestid作为key保存到redis,相应的返回结果集作为value存储到redis,并设置超时时间。当同一个请求第二次访问时会先检测redis是否存在该requestid,如果存在则证明重复提交了,接口直接返回不再继续调用了。五、API调用流程
  1。接口调用方(客户端)向接口提供方(服务器)申请接口调用账号,申请成功后,接口提供方会给接口调用方一个appid和appkey
  2。客户端携带参数appid、timestamp、requestid、sign去调用服务器端的APItoken,其中sign加密(appidtimestamprequestidappkey)
  3。使用参数appid,timestamp,requestid,sign来获取token,token作为系统调用的唯一凭证
  4。客户端拿着token去访问相应的接口
  5。如果token过期需要获取刷新token
  sign的作用是防止参数被篡改,客户端调用服务端时需要传递sign参数,服务器响应客户端时也可以返回一个sign用于客户端校验返回的值是否被非法篡改了。六、接口文档
  1、尽量采用自动化接口文档,可以做到在线测试,同步更新,推荐使用swagger、yapi。
  2、应包含:接口BASE地址、接口版本、接口模块分类等。
  3、每个接口应包含:
  接口地址:不包含接口BASE地址。
  请求方式:GET、POST。
  请求参数:数据格式【默认JSON、可选formdata】、数据类型、是否必填、中文描述。
  响应参数:类型、中文描述。七、总结
  关于限流设计、熔断设计、降级设计,目前主流网关都有相关功能(比如shenyu网关),可以不在API实现中开发这些功能。
  另外推荐把API相关日志存储到日志平台,日志平台有利于故障定位和日志统计分析以及接口监控。
  日志平台的搭建可以使用的是ELK组件,使用Logstash进行收集日志文件,使用Elasticsearch引擎进行搜索分析,最终在Kibana平台展示出来。

2023年全国女足锦标赛开踢海南琼中女足战平广东队新海南客户端南海网南国都市报2月12日消息(记者陈望)2月12日,2023年全国女足锦标赛在昆明打响,首场比赛,海南琼中女足迎战广东队。最终,两队战成00。在本组另一场比赛中,北京技术型工人需求旺盛企业线上线下高薪招人央视网消息眼下正是开年招聘旺季,我们的记者在浙江慈溪走访发现,春节后的多场大型线下招聘会上,每场都有数百家企业求贤若渴。哪些工种比较受欢迎呢?一起来看。在招聘会上,记者发现,研发工北京高考第一次英语听说机考2月25日举行央视网消息据北京教育考试院消息,北京市2023年高考英语听说机考考生须知公布。一考试安排北京市高考英语听说考试采用计算机考试模式,实行一年两考。2023年高考第一次英语听说考试于2珠海如何靠海吃海?聚焦现代海洋产业链精准招商,15大项目签约额约150亿元南方财经全媒体记者彭敏静珠海报道作为珠三角地区海洋面积最大岛屿最多海岸线最长的城市,珠海拥有桥通港澳的独特区位拥江揽海的地理条件厚积薄发的产业优势通达便捷的物流体系百岛星罗的秀美风历史首次!上海籍运动员亮相全国单板滑雪平行项目冠军赛,斩获第26名日前,为期两天的20222023赛季全国单板滑雪平行项目冠军赛在张家口市崇礼区云顶滑雪场落下帷幕,上海运动员钱雨萱由锦标赛32强成功进入冠军赛,在众多优秀选手中突出重围,斩获全国第助力国家双碳目标实现中汽中心发布全球首个汽车产业链碳公示平台21世纪经济报道记者杜巧梅北京报道2月9日,中国汽车技术研究中心有限公司(下称中汽中心)宣布成立中汽碳(北京)数字技术中心有限公司,并正式发布中国汽车产业链碳公示平台(CPP)。据工业品电商,不从事生产也要有标准工时概念!各行各业都需要计划,特别是企业越大,计划就越复杂,管理制造采购技术营销在一个企业的不同阶段必然轻重不同,工业品电商更是如此,生产运营一团乱麻,那就别怪竞争对手强于自己!为什么我们说Kubernetes网络权威指南读书笔记最常用的Docker网络技巧书籍来源Kubernetes网络权威指南基础原理与实践一边学习一边整理读书笔记,并与大家分享,侵权即删,谢谢支持!附上汇总贴Kubernetes网络权威指南读书笔记汇总COCOgs红米K60性价比不够极致,没关系,真我GTNeo5会出手!近两年,大家在选择手机的时候都会选择性价比较高一些的手机,而说起性价比,我们以往都会想到红米这一品牌,然而这两年红米带来的产品定价慢慢过高,真我则扛起了红米性价比的大旗。前两天发布NASA探测器发现火星上有波浪存在过的证据但航天局表示,取样一直很艰难。好奇号探测器发现了这个沙漠星球上古时代水波的明确证据探索火星山脚下的NASA漫游车发现了波纹状的岩石,为科学家们提供了迄今为止这颗红色星球上存在过水波建好一个独立站,要做哪些准备?奎宇科技(杭州)有限公司是一家大数据和人工智能高科技公司致力于解决中国跨境企业卖全球的数智化解决方案与技术服务的SAAS服务公司我们的使命愿景是建设数字化丝绸之路,打造中国商品出海
狂人穆里尼奥学院派主教练的升级之路传奇一生你们说,穆里尼奥到底有什么样的魔力,只用了一场比赛,就差点将葡超两大豪门拆家,而他新加盟的俱乐部,在他上班第一天开始,他就将俱乐部管理层几乎都得罪一遍,而他用硬实力告诉了所有人,我新疆炮轰,姚明硬刚,一场合同纠纷下的体制真相CBA和篮协的问题,看似是一个体制问题,其实是一个涉及计划经济自由市场资源管制贸易壁垒的经济学问题。文巴九灵(微信公众号吴晓波频道)自从NBA退役,姚明有了新工作中国篮协主席。他曾弘扬雷锋精神参与志愿服务海安雅周江海志愿者组织学雷锋活动陆宝文王开彬3月4日,海安市雅周江海志愿者服务站,雅周社会组织培育发展中心为纪念向雷锋同志学习题词发表60周年,组织志愿者上午深入残疾人家和帮扶人家进行理疗理发打扫卫生等服务活动,3月6日深夜,中国传来4个消息,个个都说出了老百姓的心声今天是3月6日,全国两会正在召开,每天都有委员的新提案传来,花上几分钟了解一下,有的可能将发生,也是让人期待的事情。感受国家的政策变化,认为非常给力,接下来,我为大家分享这四个消息科技创新主题理财日渐受宠理财公司接连布局是何缘由理财公司正在抢滩布局新兴领域以丰富产品品类。3月6日,北京商报记者注意到,近日,浦银理财全额认购了母行浦发银行落地的全国首单科技创新主题理财直接融资工具。在此之前,亦有不少理财公司洋女婿聊两会德国高管托马斯我的未来在中国视频加载中编者按3月,中国进入两会时间。这不仅是中国的大事,也吸引着全球目光。有这样一群人,他们来自世界各地,因好奇或向往来到了中国,遇到命定的另一半,成为中国女婿。他们看到了中国机构调研Filecoin的潜力是巨大的,未来20年数据将增加1000倍互联网的早期发展花了大约20年的时间,直到1989年发明了万维网,释放了它的巨大潜力并改变了我们与数据交互和相互通信的方式。万维网位于支持互联网的基础设施之上,使用称为统一资源定位Z45次武昌到杭州,Z47次杭州到武昌凭什么能成为最受欢迎特快列车云游风物之旅春暖花开的季节,又到了旅游旺季,来一场顺走就走的旅行,是多少人的理想与向往,尤其是运火车去旅行,让心灵放松,让心情舒畅,让青春荡漾,让春天奔放。可能你没坐过Z45次武昌日本深受欢迎的药妆店,了解一下!暖灯点亮你的旅日生活日本的药妆店以低廉的价格出售种类繁杂,有药品化妆品补品日用品糖果等。而且许多商品都是免税的。因此非常受外国游客的欢迎。药妆店已成为日本人生活中不可或缺的一部分,丽水青田诗画小舟山景区对面山火燎原,救灾进行时(3。4。1400于现场)山火熊熊,昨天到现在,蔓延开来中。森林火灾警察上来了,说局长在火线前线指挥部。我能做些什么呢?以前做过救灾志愿者,可是我到了现场,没有救灾用具,什么也做不福建云霄又到枇杷收获季3月3日拍摄的云霄县和平乡棪树村的枇杷生态观光产业园(无人机照片)。福建省漳州市云霄县是中国枇杷之乡,枇杷是该县农业支柱产业。眼下又到了云霄枇杷收获的季节。近年来,该县积极引进枇杷
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网