问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

一文说清楚HTTP API的参数设计

创作时间:
作者:
@小白创作中心

一文说清楚HTTP API的参数设计

引用
CSDN
1.
https://m.blog.csdn.net/ruzhila/article/details/138346093

RESTful 是当前前后端分离架构最重要的协议设计体系,每个后端人员都应该学会设计一个合理的 RESTful API。

在设计 RESTful API 的时候,参数设计是一个非常重要的环节,本文就来说说 HTTP API 的参数设计。

HTTP API请求的基本结构

HTTP API 请求的基本结构如上图所示,主要包括:

  • 请求方法(METHOD):GET、POST、PUT、DELETE 等
  • 请求路径(URL):API 的路径
  • 请求体(BODY):API 的请求体

主要包括了三部分:
METHOD
,
URL

Body

我们基于一个实际的需求来设计规范, 项目可以参考后端实战:多线程HTTP下载服务器, 我们摘要这里面的两个基本需求:

  1. 列出服务器上的文件
  2. 提交一个下载任务

今天不讲解如何选择
METHOD
,根据需求,可以判断第一个需求可以优先选择
GET
,第二个需求可以用
PUT
或者
POST

我们重点讲解如何设计
URL

URL 参数设计

根据第一个需求:列出服务器一个目录的所有文件,并且可以根据文件名或者文件大小排序,那么我们需要的参数包括:

  • path
    : 列出的路径,
  • sort
    : 排序方式, 可以选择
    name
    或者
    size
    , 按照文件名或者大小排序

根据需求,实际上的HTTP请求:
URL对应是
/file/list
, 因为选择了
GET
请求,那么就意味着不能通过
BODY
提交数据。

所以,所有的参数都应该作为
QUERY
出现,也就是
?
后面的部分。

METHOD
GET
的时候,参数都应该作为
QUERY
出现,也就是
?
后面的部分。

服务端对应的代码(以Java为参考):
服务端Gin框架对应的代码(以Go为参考):

QUERY参数的优缺点:

  • 优点:简单,直观,可以直接在浏览器中输入, 并且accesslog能完整记录
  • 缺点:参数长度有限制,不适合传递大数据,并且参数是可以重复的,比如
    /file/list?path=/&path=/usr
    ,很容易引起歧义

BODY 参数设计

除了METHOD
GET

OPTION
之外的所有请求,都建议使用
BODY
来传递参数,可以传递更复杂的参数

根据第二个需求:提交一个下载任务,我们需要的参数包括:

  • url
    : 下载的URL
  • btfile
    : 可以提交一个bt种子文件,这个内容就可能会出现几M的情况

根据需求,实际上的HTTP请求:
这时候比第一个请求多了一个
Header
Content-Type: application/x-www-form-urlencoded
,这个是告诉服务端,请求体是一个表单格式的数据。

当然可以支持的格式特别多,主流还是
json
格式

服务端对应的代码(以Java为参考):
服务端Gin框架对应的代码(以Go为参考):
我们从代码上理解,已经从
QUERY
参数转变为
BODY
参数, 两种接受参数的方式是不一样的。

如果
btfile
比较大,那么就可以通过
multipart/form-data
来传递,这个是支持文件上传的。

BODY参数的优缺点:

  • 优点:参数长度没有限制,可以传递大数据,参数不会重复
  • 缺点:不直观,不能直接在浏览器中输入,accesslog不能完整记录

总结

  • GET
    请求,参数都应该作为
    QUERY
    出现,也就是
    ?
    后面的部分
  • 除了
    GET

    OPTION
    之外的所有请求,都建议使用
    BODY
    来传递参数,可以传递更复杂的参数

不同的参数方式,服务器的代码就需要用不同的方式去接收参数,这个是需要注意的:

  • QUERY
    参数,可以通过
    @RequestParam
    来接收
  • BODY
    参数,可以通过
    @RequestBody
    来接收
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号