关于Post和Put的RESTful API的设计

项目中遇到了一个API的设计问题,我们是核心支付团队,其中有个API是用来验证这个支付订单的合法性的,输入为一个支付订单,包括支付方式,购买物品,商户号以及支付订单号等,输出为一个包含Violation的支付订单对象。可以理解是对支付订单做装饰。如果按照REST的动词来理解,PUT是传入一个完整的对象,如果这个对象不存在就创建,如果存在就把输入的对象替换为数据库里的对象,POST是创建一个新的对象。

从行为来判断,用PUT或者POST都可以,传入为对象,API path是/<resources>/validation。但如果用POST那就不应该在path里出现/<resource>/validation/{id}这种东西,因为这相当于知道这个对象已经存在,那么更新就应该是UPDATE了。

当然这是纯粹从理论的角度出发,如果已有的系统里已经有了这种设计,那么建议按照已有的风格继续,否则出现不一致会严重的影响整体代码的可读性并且增加维护难度。

最后对于POST /<resource>和 POST /<resource>/validation,input最好要用防腐层进行隔离,不要把这两个input为了图省事,都用一个对象,因为一旦一个地方做了修改,可能对另一个地方没有意义,而且这样也隔离了变化,是更好的设计。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容