休息 – WebApi和OData

我是WebApi的新手,我不太了解它.

我确实知道所有的动词都集中在Get,Put,Post和Delete上.
但是来自重型DDD和MVC背景,我需要一些指示.

我习惯于公开服务/资源/操作,无论你想调用它做什么内部过滤.
例如对于SalesOrder服务,我可能有GetTodaysOrders,GetUnapprovedOrders等操作.
对“SalesOrder集”应用某些过滤的操作

所以,在WebApi和休息一般我想,我不应该这样做?
我应该公开整个SalesOrder集?

并且可以使用OData进行过滤,但是这会使得知道要过滤给消费者的响应能力,消费者必须知道要求什么,例如,消费者必须知道任何域/业务规则.
那部分对我来说似乎完全不同寻常.

你是如何处理这类事情的?
这可以用某种方式处理,我并不是说像一个hacky方式,比如为每个可以过滤一些数据的方法创建一个新的web api控制器.

最佳答案 我感觉到你的痛苦.我第一次真正被迫改变自己的思维方式是在我开始使用
Ruby On Rails开发时.

关于一般的曝光方法,请按以下顺序进行:

>首先公开资源的完整CRUD操作集(也就是创建RESTful资源)
>通过对这些方法进行前后挂钩以进行身份​​验证/权限检查以及诸如此类的东西,返回并将不应暴露的内容私有化.

那么,当你拥有了自己的资源时,通常一个好的经验法则是在展示之前展示什么是必要的?并隐藏了?背后的复杂性,从而使您的资源能够进行过滤,但不需要它.换句话说,用过滤装饰你的方法.

所以,假设你想要一个/ orders端点:

Base URL: /orders
REST params: /orders(:/id)
Additional params:
  - dateRange
  - purchaseStatus
  - price
  - etc
Example usage: 
  /orders?dateRange=1y&price=lt:100

当然,我说所有这些都是因为我倾向于同意APIGEE在API最佳实践白皮书中所说的内容.我想你会发现它很有帮助.

https://pages.apigee.com/rs/apigee/images/api-design-ebook-2012-03.pdf

点赞