构建查询无结果则新建记录的REST API应选哪种HTTP方法?需几个接口?
REST API“查有则返、无则创建”场景实现方案
HTTP方法选择
- 首先绝对禁止使用
GET方法:HTTP规范明确要求GET是安全方法,执行后不能修改服务端资源,你的场景包含创建资源的写入操作,用GET会违反语义,还可能因为请求缓存导致创建逻辑无法正常触发。 - 优先选择
PUT方法:如果你需要操作的资源唯一标识可以直接通过请求携带的搜索参数生成(即可由客户端提前确定资源的完整URI),PUT是最优解。PUT本身是幂等方法,多次调用的效果和单次完全一致,完美匹配“首次调用创建资源、后续调用返回已有资源”的逻辑,不会产生重复创建的问题。 - 备选
POST方法:如果资源的唯一标识由服务端生成,无法通过搜索参数提前确定资源URI,可使用POST方法,把所有搜索参数放在请求体中传递即可,注意需要在服务端额外做防重复校验,保证相同参数不会被重复创建。
接口数量要求
完全可以通过单个API实现,不需要开发两个独立接口。你只需要在同一个接口的服务端逻辑中先执行参数匹配查询,再根据查询结果走对应分支即可,还可以通过响应状态码区分处理结果:
- 匹配到已有资源,返回
200 OK,响应体携带对应资源信息 - 未匹配到资源、完成新记录创建后,返回
201 Created,可在响应头Location字段附带新资源的访问URI
内容的提问来源于stack exchange,提问作者Saurabh
相关产品推荐
相关产品推荐

