如何以资源为中心的样式建模RPC样式示例

时间:2013-06-19 20:48:30

标签: rest hateoas

我已经在网上阅读了几天关于REST的内容,并且正在努力解决HATEOAS的概念。

我认为我正在努力,因为我没有正确理解如何将数据建模为资源和(状态转换?)资源之间的链接。我相信我的问题是我的所有经验都是OO和RPC,我不习惯以资源为中心的思维方式。

获得理解的唯一方法是从我的世界中取一个例子,说出我认为可能看起来像是以资源/链接为中心的方式建模,然后把它扔到那里被火焰击落。烧伤完成后,我至少应该更好地理解我不理解的东西。

我的(简化)示例是:

我是承包商,例如一个水管工。 我分配了很多工作。 我可以搜索我的工作,指定简单的参数,例如目标日期范围。 我可以开始分配给我的任何工作。当我开始工作时,我可以选择指定我开始工作的时间,或者如果我现在开始工作则将其留空。

如果我以RPC方式实现这一点,我可能会向调用者公开两种方法:

ListOfJobs GetJobs(search parameters)
StartJobResult StartJob(jobID, optional start datetime)

如您所见,我正在考虑对象和操作。

如果我在考虑资源和链接,资源可能是什么?

我的猜测是:

  • 承包商:〜/承包商/ plumbersareus?
  • JobSearch:〜/ contractor / plumbersareus / searching / searchidentifier?
  • 工作:〜/ job / 12345?
  • 出勤率:〜/ job / 12345 / attendances / attendanceidentifier?

假设上述任何一个是正确的(我怀疑是),那么“searchidentifier”和“attendanceidentifier”应该是什么?前者在我的RPC世界中没有身份;它只是参数。后者将由DateTime识别。

链接可能是什么(忽略自己的链接)?

  • 承包商:〜/承包商/ plumbersareus /搜索?
  • JobSearch:〜/ job / 12345,〜/ job / 12346等?
  • 工作:〜/ job / 12345 / attendances?
  • 出席:?

如果这是一个重复的问题,请接受我的道歉并将其关闭。 (我找不到重复,但我可能一直在搜索错误的术语。)

1 个答案:

答案 0 :(得分:0)

你可能已经读过这两本好书:

回到你的问题。更实际的思考或应用REST作为起点(至少对我有用)的方法是以下列方式思考:

1)仅使用HTTP“GET / POST / PUT / DELETE”作为建模域名“行动”的方式。就像处理数据库时一样,所有操作都映射到CURD

2)URI / URL仅用于标识资源。不应该在URI中有任何“操作”。

3)交换的数据应该在HTTP消息的正文中。 只是为了简化讨论,而不是如何对数据本身进行建模

以下是我的想法。我确信有更好的方法来模拟你所拥有的东西,但它应该遵循相同的原则☺。 URL模式的外观取决于您的应用程序域以及客户端和后端之间的含义。

模拟“获取工作”:

  • HTTP:GET
  • 网址:〜/ contractors / [plumberID] / jobs /

模拟,求职:

  • HTTP:GET
  • 网址:〜/ jobs /?[some search params] /

模型将作业分配给用户:

  • HTTP:PUT
  • 网址:〜/ contractors / [plumberID] / assignments / [jobID]

使用PUT与POST存在一些差异,您可以搜索。

希望得到这个帮助。