规范既是为了接口可读性,也是方便同事间的协作。
说明:这个规范更多是针对算法工程师,对于后端开发工程师,接口开发规范还需要依次做进一步的细化。
0x01 接口设计基础原则
在说明接口开发规范之前,先说几个基础的原则:

response_model: 这个是定义输出
params:这个是定义输入
上面图示,还对图像参数进行了转换,因为接口传图像使用的都是base64,使用的时候,都使用转换成相应的格式。

对应的配置代码:

描述信息description是支持markdown格式的。
0x02 命名及字段规范

接口的名字是接口的门面,可读性的因素,名字格式:
/object/action
其中object是操作对象,是一个名词,如上面的watermark, seal, object等,而action是动作,是一个动词,如remove,compare等。object和action应该都是一个英文单词,不应该出现下划线,更加不应该出现所谓驼峰命名,代码如:
@app.post('/watermark/remove', response_model=RMWatermarkResp,
summary="水印去除")其中summary是定义接口的说明,就是显示在上图中的文字。

Item可以直接用于响应客户端,也可以包装成响应的类,如:
class LineDetectResp(BaseModel):
lines: List[LineItem] = Field([], title='文本行', example=[])
tables: List[TableItem] = Field([], title='表格', example=[],
description='当open_table=true时,该字段才存在')
paragraphs: List[ParagraphItem] = Field([], title='段落', example=[],
description='')如果是单一对象,则可以命名为Item类,如果不太单一的,则可以命名为Resp类(类名以Resp结尾)。

字段还有其他的信息可以设置,具体可以参照Field的文档说明。这些字段信息,主要有两方面作用,一方面是用于展示,另一方面用于参数校验,参数校验能省下不少代码。
对于规范,很多时候是需要秉持一种“强迫症”,一个变量命名,一个空格,一个逗号,也是不应该大意的。