OData —— 让 REST 请求更有意义

昨天做竞品分析的时候发现一个叫做 OData 的特性,听说是一种行业标准,本着“连行业标准都不知道还怎么混的心情”去网上查了下资料。


OData 全称 Open Data Protocol,是基于 HTTP 的一种通信协议,就和 REST 一样。不一样的是 REST 大部分内容是定义了几种请求头的动作含义,比如取数据用 GET,新增数据用 POST 等等,但具体如何传输数据是看服务器如何实现的,对于前后端的约定还是比较宽松的。而 OData 则不同,它定义了更细颗粒度的动作命令,比如为了获取 Russel Whyte 这个人的信息,需要发送 GET 请求是这样的

http://services.odata.org/V4/TripPinService/People('russellwhyte')

再进一步,为了获取 Russel Whyte 的 First Name,则请求是这样的

http://services.odata.org/V4/TripPinService/People('russellwhyte')/FirstName

获取所有女性的信息

http://services.odata.org/V4/TripPinService/People?$filter=Gender eq Microsoft.OData.SampleService.Models.TripPin.PersonGender'Female'

上面三个例子里,你会发现一些“诡异”的写法,比如 ('russellwhyte')$filterMicrosoft.OData.SampleService.Models.TripPin.PersonGender'Female',这就是我上面说的“更细颗粒度”的操作,也是协议所谓的约定(conventions),同时既然客户端这么发请求了,服务器也得按这约定去解析,也就起到了规范的作用 —— 只要我知道你是符合 OData 协议的,那我就知道了如何构建请求。

另外,既然是对前后端都有约束作用,那实现层面就得分成 Client 和 Server,大概看了下目前的类库(libraries),也的确是这么分的,不过都已经好几年不更新了,也不知道是因为很稳定了呢,还是因为这个协议没什么人用,从而没动力更新(比如我,就是昨天才听到的 😂)。

就我个人而言,我觉得这个协议挺好的,打算在产品上推一把,毕竟竞品都实现了嘛。


参考资料

posted @ 2021-10-13 11:31  尹宇星_Kim  阅读(144)  评论(0编辑  收藏  举报