执行逻辑并返回结果的REST接口应选用哪种HTTP方法?
该选哪种HTTP方法?看这几点就清楚了
这个问题确实容易让人犯嘀咕,毕竟REST的方法语义有时候会被各种场景混淆。咱们结合你说的「接收整数返回数列」这个具体例子,从REST的核心原则出发捋明白:
首先抓核心判断标准:你的操作有没有副作用(比如修改服务器上的数据、状态),以及是否幂等。
首选:GET方法
如果你的端点只是纯计算——输入整数,跑逻辑生成数列,完全不会修改服务器的任何数据,而且同一个输入不管调用多少次,返回结果都一样(也就是幂等),那GET绝对是最优选择。
原因很简单:
- 贴合GET的语义:REST里GET是用来「获取资源」的,这里的“资源”可以理解为「由输入参数唯一确定的计算结果」。比如你要生成前10项斐波那契数列,端点可以设计成
GET /sequences/fibonacci?length=10,请求参数直接放在URL的查询串里,返回对应的数列数组。 - 缓存友好:浏览器、CDN或者服务端都可以缓存GET请求的结果,重复调用相同参数的请求直接返回缓存,性能更好。
- 符合幂等性要求:多次调用不会产生任何意外结果,这也是REST对GET的基本要求。
什么时候考虑用POST?
虽然GET是首选,但也有特殊情况可以用POST:
- 输入内容过长或者不适合放在URL里(不过你例子里是整数,这种情况很少见,但如果是极长的数字串或者复杂参数结构,可能会触发URL长度限制);
- 团队内部有明确规范,要求所有“计算型”接口都用POST(虽然这其实有点违背REST语义,但工程上有时候会有这种约定)。
如果用POST,你可以把输入的整数放在请求体里,比如:
POST /sequences/fibonacci Content-Type: application/json {"length": 10}
但要注意,POST的语义更偏向「提交一个请求来创建/处理资源」,而且默认不会被缓存,所以除非有实际的限制,还是优先选GET。
绝对不要选的方法
像PUT、DELETE这些就别考虑了:
- PUT是用来「更新已存在的资源」,和纯计算完全不沾边;
- DELETE是「删除资源」,更不用说了。
总结下来,只要是无状态、无副作用的纯计算接口,GET就是最符合REST设计的选择~
内容的提问来源于stack exchange,提问作者ak123
相关产品推荐
相关产品推荐

