一、定义
1.RPC(Remote Process Call)—— 远程过程调用
以“控制器/操作方法”的形式把服务器端的代码当成方法去调用。把HTTP当成传输数据的通道,不关心HTTP谓词。通过QueryString、请求报文体给服务器传递数据。例如:
/Persons/GetAll
/Persons/GetById?id=1
2.REST(Representational State Transfer)—— 表述性状态传递
按照符合HTTP语义的方法来使用HTTP协议。越符合以下几条,就越靠近REST风格。
1)URL用于资源的定位;
/user/888
/user/888/orders
2)根据HTTP谓词语义来设计接口:GET、POST(新增)、PUT(整体更新)、DELETE、PATCH(部分更新);
3)幂等性:如果某个操作调用一次与调用多次造成的结果是一样的,那就是幂等的。GET/DELETE/PUT是幂等的,POST不是,因为如果根据HTTP语义来使用,POST用于新增,每用一次将新增一条记录;
4)服务器端要通过状态码来反应资源获取结果。404、403(没有权限)、201(新增成功)。
二、优缺点
1.RPC:业务驱动,自然。
2.REST:
优点:
1)通过URL对资源定位,语义更清晰;
2)通过HTTP谓词表示不同的操作,接口自描述;
3)可以对GET/PUT/DELETE这些幂等操作进行重试;
4)可以用GET请求作缓存;
5)通过HTTP状态码反应服务器端的处理结果,统一错误处理机制;
6)网关等可以分析请求处理结果。
缺点:
1)真实系统资源复杂,很难清晰划分,对业务技术水平要求高;
2)不是所有操作都能简单的对应到确定的HTTP谓词操作;
3)系统的进化可能改变幂等性;
4)通过URL进行资源定位不符合中文用户习惯;
5)HTTP状态码个数有限;
6)有的客户端不支持PUT/DELETE请求。
三、使用选择
1.REST是学术化概念,不是使用要求,仅供参考。
2.根据公司情况,进行REST的选择和裁剪。