【发布时间】:2014-10-06 21:44:11
【问题描述】:
我正在构建一个库存管理系统,并且忙于设计(思考)API 和我的 REST 实现。
我有以下资源,您可以在该资源上执行许多操作/操作。 每个操作都会修改资源,在某些情况下会创建新资源,还会创建历史记录或事务。
我正在寻找有关 URL 和资源设计的可用性和可接受性的专家意见。陷阱和现实世界的例子,欢迎任何意见或批评。
我担心整个应用程序可能是围绕这一大资源开发的? 我的后端堆栈将是 C# 和 servicestack 框架,而对于前端我将使用 HTML 和 AngularJS。并不是说它有什么不同。
场景 1。 典型的操作是:
POST /inventory/{id}/move
POST /inventory/{id}/scrap
PUT /inventory/{id}/takeon
POST /inventory/{id}/pick
PUT /inventory/{id}/receive
POST /inventory/{id}/hold
POST /inventory/{id}/release
POST /inventory/{id}/transfer
POST /inventory/{id}/return
POST /inventory/{id}/adjustment
{
"userID": "", //who is doing the actions (all)
"tolocationID": "", //new location for inventory (move/takeon/pick/receive/transfer/return)
"qty": "", //qty (pick/receive/takeon/transfer/return)
"comment": "", //optional for transaction (all)
"serial": "", //(takeon/receive)
"batch": "", //(takeon/receive)
"expirydate": "", //(takeon/receive)
"itemCode": "", //(takeon/receive)
"documentID": "", //(pick/receive/return/transfer)
"reference" :"", //(all)
"UOM" :"", //(all)
"reference" :"", //(all)
}
这在标准方面是否可以接受。 另一种方法可能是。
场景 2。
POST /inventory/{id}/move
POST /inventory/{id}/scrap
PUT /inventory/{id}/takeon
POST /document/{id}/pick //**document**
PUT /document/{id}/receive //**document**
POST /inventory/{id}/hold
POST /inventory/{id}/release
POST /document/{id}/transfer //**document**
POST /document/{id}/return //**document**
POST /inventory/{id}/adjustment
然后去改变资源。
场景 3. 在我看来是错误的
POST /transaction/move/{...}
POST /transaction/scrap/{...}
PUT /transaction/takeon/{...}
POST /transaction/pick/{...}
PUT /transaction/receive/{...}
POST /transaction/hold/{...}
POST /transaction/release/{...}
POST /transaction/transfer/{...}
POST /transaction/return/{...}
POST /transaction/adjustment/{...}
欢迎任何 cmets,不是在寻找答案,而是在设计考虑方面提供更多建议?
感谢您花时间阅读这篇文章!
【问题讨论】:
-
这听起来更像是 RPC 而不是 REST。像
/inventory/{id}/move这样的 URL 可以识别哪些资源?如果这是一个过程调用的 URL 而不是资源的 URL,那么你没有做 REST。 -
我不认为“不做 REST”是一件坏事,因为 REST 天生适合 CRUD 操作,而这组操作显然更丰富。我相信,在这种情况下,选择 RPC 范式而不完全遵循 REST 并没有错。当然,这取决于领域的哪些方面需要模型。
-
@VictorSergienko 我同意这种观点,但如果他标记问题 [rest],他必须期待 REST 答案。
-
@EricStein 这很有帮助我认为我最大的困难之一是 RPC 在技术方面不符合我的要求,这就是我探索替代方案的原因。但同时出于对 REST 的尊重,我认为我正在尝试以正确的方式来做这件事,但正确的方式再次将我置于感觉错误的位置,但不是在技术意义上,而是在业务领域。我想我在找人说:嗨,您不必对此深信不疑:-)然后我是否应该离开 REST 和 ServiceStack 框架并重新回到 Microsoft Web 服务的床上?
-
@Francois,您不必更改技术堆栈。我相信 Eric 说的是意识形态问题,我也是。你仍然可以使用 RPC 风格的 HTTP+JSON,或者 REST 风格的 Web 服务。
标签: rest architecture servicestack