文档管理中心

面试官:你连RESTful都不知道我怎么敢要你?【后】


6. 合理使用query parameter

在请求数据时,客户端经常会对数据进行过滤和分页等要求,而这些参数推荐采用HTTP Query Parameter的方式实现

比如设计一个最近登陆的所有用户
https://example.com/api/users?recently_login_day=3
  • 1
  • 2
搜索用户,并按照注册时间降序
https://example.com/api/users?recently_login_day=3
  • 1
  • 2
搜索用户,并按照注册时间升序、活跃度降序
https://example.com/api/users?q=key&sort=create_title_asc,liveness_desc
  • 1
  • 2
关于分页,看看博客园开放平台分页获取精华区博文列表
https://api.cnblogs.com/api/blogposts/@picked?pageIndex={pageIndex}&pageSize={pageSize} 返回示例: 
[ { “Id”: 1, “Title”: “sample string 2, “Url”: “sample string 3, “Description”: “sample string 4, “Author”: “sample string 5, “BlogApp”: “sample string 6, “Avatar”: “sample string 7, “PostDate”:2017-06-25T20:13:38.892135+08:00, “ViewCount”: 9, “CommentCount”: 10, “DiggCount”: 11 }, { “Id”: 1, “Title”: “sample string 2, “Url”: “sample string 3, “Description”: “sample string 4, “Author”: “sample string 5, “BlogApp”: “sample string 6, “Avatar”: “sample string 7, “PostDate”:2017-06-25T20:13:38.892135+08:00, “ViewCount”: 9, “CommentCount”: 10, “DiggCount”: 11 } ]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

7. 多表、多参数连接查询如何设计URL

这是一个比较头痛的问题,在做单个实体的查询比较容易和规范操作,但是在实际的API并不是这么简单而已,这其中常常会设计到多表连接、多条件筛选、排序等。
比如我想查询一个获取在6月份的订单中大于500元的且用户地址是北京,用户年龄在22岁到40岁、购买金额降序排列的订单列表

https://example.com/api/orders?order_month=6&order_amount_greater=500&address_city=北京&sort=order_amount_desc&age_min=22&age_max=40
  • 1

从这个URL上看,参数众多、调用起来还得一个一个仔细对着,而且API本身非常不容易维护,命名看起来不是很容易,不能太长,也不能太随意。

在.net WebAPI总我们可以使用属性路由,属性路由就是讲路由附加到特定的控制器或操作方法上装饰Controll及其使用[Route]属性定义路由的方法称为属性路由。

这种好处就是可以精准地控制URL,而不是基于约定的路由,简直就是为这种多表查询量身定制似的的。 从webapi 2开发,现在是RESTful API开发中最推荐的路由类型。
我们可以在Controll中标记Route

[Route(“api/orders/{address}/{month})] 
  • 1

Action中的查询参数就只有金额、排序、年龄。减少了查询参数、API的可读性和可维护行增强了。

https://example.com/api/orders/beijing/6?order_amount_greater=500&sort=order_amount_desc&age_min=22&age_max=40
  • 1

这种属性路由比如在博客园开放的API也有这方面的应用,如获取个人博客随笔列表

点赞
收藏
回复
分享
举报
浏览348 发布于2019-11-17 04:17未知归属地
全部评论
最多点赞
最新发布
最早发布
写回答
新增插入模板功能
一键使用模板,快速填写内容,轻松发帖~
知道了
  • 为了保障您的信息安全,请勿上传您的敏感个人信息(如您的密码等信息)和您的敏感资产信息(如关键源代码、签名私钥、调试安装包、业务日志等信息),且您需自行承担由此产生的信息泄露等安全风险。
  • 如您发布的内容为转载内容,请注明内容来源。

我要发帖子

了解社区公约,与您携手共创和谐专业的开发者社区。