api数据加密的定义_API 设计基础规范

首先,请务必记住 API 设计和使用的一个重要法则 Postel's Law(又称作稳健性原则):

  • Be liberal in what you accept, be conservative in what you send

下面是关于 API 设计的一些基本问题

API First

将 API 视作产品,并向产品开发一样设计和维护 API

  1. 在代码实现前的 Design 阶段,就优先定义符合标准规范的 API
  2. 与客户(API 的使用者)一起设计和审查 API
  3. 设计可用性、可读性和可维护性的 API
  4. 长期积极维护 API 并保持 API 的一致性

代码结构

项目(Git Repo) 中应包含以下目录用于描述 API

  • README.MD
    • 可以包含服务 API Spec 的 Jira Link
  • 文档
    • doc/* 目录下的 markdown 文件或链接到 git
  • 接口定义
    • 按 API 版本分目录 v[0-9]*/*
    • 每个版本中需包含 swagger yaml 文件

安全

无论是 public API 还是 internal API,在设计时都需要考虑安全性问题。对于外部 API,暴露在因特网上本来就充满了风险。对于内部 API,不要认为内网是安全的,比如在微服务网络中,要避免级联失败或者第三方继承点问题。可以采用以下方案提高 API 的可用性:

  • 总是使用 SSL(Public API 必须开启,内部 API 根据具体场景具体分析)
  • Public API 必须支持 CSRF
    • Is your Web API susceptible to a CSRF exploit?
  • Throttling
    • 主要针对 public API, 此外 internal API 也需要考虑承载能力
    • 响应 503 with Retry-After header
  • 考虑 Subtle Denial of Service
    • DoS attacks:Slowloris, Billion laughs, and ReDoS
  • Authentication
    • 针对 Public API 使用 Oauth2 或者 HTTP Basic Authentication
    • 针对内部 API 可以使用协商的加密认证算法

命名规范

  1. 总是使用小驼峰
  2. 使用美式英语
  3. 允许使用缩写
    1. 产品名
    2. API
    3. config (configuration)
    4. id (identifier)
    5. spec (specification)
    6. stats (statistics)
  4. 使用准确描述 API 的命名,而非笼统模糊的命名(如 items)
  5. 尽量避免使用编程语言中的保留字

文档

遵循 OpenAPI Spec version 3,使用 swagger-editor 编辑文档,每个 API 的描述至少包含以下内容:

  • x-api-id: 为每个 API 设置 UUID 以便于索引
  • x-audience:API 受众
    • internal-component
    • internal-company
    • external-public
  • title: API 名称
  • version:API 版本
  • description:API 描述
  • contact/{name,url,email}:维护团队
  • 使用美式英语书写

使用 JSON 作为数据交换格式

默认采用 JSON 数据类型,非 JSON 媒体类型请使用其他相应的媒体类型

JSON 应符合 RFC4627 和 RFC 7159,并满足以下的要求:

  1. 针对 PUT/PATCH/POST request body 以及任意响应的 response body 使用标准媒体类型 application/json
  2. 响应和请求中优先使用以下预定义的标准字段
    1. createdAt
    2. updatedAt
    3. deletedAt
  3. 使用 UTF-8 编码
  4. 布尔值和数组不能使用 null
  5. 使用UTC(世界标准时间)时间,用ISO8601进行格式化YYYY-MM-DDTHH:MM:SSZ
  6. API 中的 date/time 应该包含 timezone 信息 RFC3339
  7. 尽可能为资源提供默认的创建时间 created_at 和更新时间 updated_at
  8. 统一格式的国家,语言和钱币
    1. ISO 3166-1-alpha2 country codes
    2. ISO 639-1 language code 或者 BCP 47
    3. ISO 4217 currency codes

来自公众号 无人深空,一个专注于技术和扯淡的公众号,请不要关注

08bbeab422e19e87e769814c8f55a686.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/562562.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

匿名内部类----java

匿名内部类----java 匿名内部类就是内部类的简化写法,是一种特殊的局部内部类。 前提:存在一个类或者接口,这里的类可以是具体的类也可以是抽象类。 本质是:一个继承了该类或者实现该接口的子类匿名对象。 适合那种只需要创建…

python视频延迟严重_利用多进程降低opencv视频延迟处理rtsp视频流

Python多进程opencv前几天遇到了一个问题,利用opencv程序调取rtsp视频流,因为处理程序要消耗的CPU时间过于长,VideoCapture的read是按帧读取,所以经常导致内存溢出,延时还高得出奇。所以想到是不是可以利用多进程把读取…

MySQL表级约束和列级约束

MySQL中只要支持六种完整性约束,如表所示:其中check约束是MySQL8中提供的支持。 约束条件 约束描述 primary key 主键约束,约束的值可唯一的标识对应的记录 not null 非空字段的值不能为空 unique 唯一约束,约束1字段的值是…

MySQL外键约束

MySQL外键约束 外键约束(FOREIGN KRY,缩写FK)是用来实现数据库表的参照完整性约束的。 外键约束可以是两张表紧密的结合起来,特别是针对修改或者删除的级联操作时, 会保证数据的完整性。 (注&#xff1…

zookeeper 密码_Dubbo、ZooKeeper介绍

dubbo是一个分布式架构的服务框架,一般结合maven的模块式开发使用。传统的单架构项目,不方便维护和升级;通过maven的模块式开发,就可以把一个单架构的工程,拆封成一个一个的小模块,包括(jar和war)&#xff…

异常--java

java默认的异常处理机制 优点:发生异常后、会给出异常类型、异常提示信息、异常出现的位置 缺点:出现异常后,后续语句不执行了;提示信息太专业,可读性差 解决:try-catch-finally 处理异常;th…

192.168.8.1手机登陆_高端机型都在鼓吹的ufs3.1是什么?对于手机使感受明显吗?...

最近很多朋友留言问,ufs3.1是什么,很重要吗?下面就由小编来给大家介绍一下手机上的ufs3.1是什么!ufs是高端安卓手机,常用的储存协议,就好像我们电脑里的固态硬盘一样,速度越快,打开软…

使用try-catch-finally处理异常---java

package demo02;import java.util.Scanner;public class TestException {public static void main(String[] args) {Scanner input new Scanner(System.in);//输入总分try{System.out.println("请输入总分");int sum input.nextInt();System.out.println("请输…

代码合并工具_11个代码质量审核和管理工具,程序员必备!

「 读者福利!2 TB 各类技术资源免费赠送 」如今,代码质量分析和审核已成为每个企业的基本流程。随着开源代码库使用的增加,安全性和代码质量对于构建高质量软件至关重要。不良的代码不仅会影响代码的可维护性,而且还会在某些情况下…

异常体系----java

一、异常体系 1、error error类层次描述了java运行时系统内部错误和资源耗尽错误,一般指与jvm或动态加载等相关的问题, 如:虚拟机错误,动态链接失败,系统崩溃等。 2、exception 所有异常类的父类,其子…

xy坐标正负方向_【笛卡尔坐标系】

【壹】笛卡尔坐标系(Cartesian coordinates)就是直角坐标系和斜坐标系的统称。相交于原点的两条数轴,构成了平面放射坐标系。如两条数轴上的度量单位相等,则称此放射坐标系为笛卡尔坐标系。两条数轴互相垂直的笛卡尔坐标系,称为笛卡尔直角坐标…

throw和throws的使用

throw和throws的使用 public class Person {private String name;private int age;public Person(){}Person(String name,int age){this.name name;this.age age;}public int getAge() {return age;}public String getName() {return name;}public void setName(String name…

python解决最优化问题_python实现最优化算法

二分法函数详见rres,此代码使该算法运行了两次def asdf(x):rres8*x**3-2*x**2-7*x3return rresi2left0right1while i>0 :i i-1ans 0.1mid1 (left right ans) / 2mid2 (left right - ans) / 2aasdf(mid1)casdf(mid2)if a > c :right mid1else :left m…

为什么需要包装类?

1、某些方法的参数必须是对象,为了让基本数据类型的数据能作为参数,提供包装类。 2、包装类还可以提供更多的功能 3、其他特别重要的功能:比如可以实现字符串和基本数据类型之间的转换 认识一下包装类吧! package demo05;impor…

python自动计算多个教学班的优秀率_第二个月课堂009python之总结(002)

python7天的总结------------------------------------------------------------------------------------------------评价:1、函数 def 自定义行数和内建函数2、re模块3、python3和python的去别4、字典,元组,列表,元组&#xf…

一句话概括自动装箱/拆箱

自动装箱过程是通过调用包装类的valueOf()方法实现的,二自动拆箱过程是通过调用包装类的xxxValue()方法实现的(xxx代表对应的基本数据类型,如intValue,doubleValue等)。 …

python loop call soon_python3-asyncio 学习笔记 1 -- call_soon

最近在学习python3 的 asyncio, 特将学习笔记记录于此.先来个简单的例子:import asynciodef hello_world(loop):print(Hello World)loop.stop()loop asyncio.get_event_loop()# Schedule a call to hello_world()loop.call_soon(hello_world, loop)# Blocking call interrupte…

2021-05-24

String类的使用 package demo07;import java.util.Locale; import java.util.function.BiConsumer;public class TestString {public static void main(String[] args) {//1.创建一个String对象String str "abcDEfghijkL";//2.操作该String对象//2.1最简单的方法Sy…

StringBuffer和StringBuild

StringBuffer和StringBuild两个类的区别主要是: StringBuffer JDK1.0提供的类,线程安全,做线程同步检查,效率较低。 StringBuild JDK1.5提供的类,线程不安全,不做线程同步检查,因此效率较高。…

python背单词游戏_Python基础-背单词游戏

Hangman直译为“吊死鬼”,是一个猜单词的双人游戏。由一个玩家想出一个单词或短语,另一个玩家猜该单词或短语中的每一个字母。第一个人抽走单词或短语,只留下相应数量的空白与下划线。想字的玩家一般会画一个绞刑架,当猜字的玩家猜…