我已经在网上阅读了几天关于REST的内容,并且正在努力解决HATEOAS的概念。
我认为我正在努力,因为我没有正确理解如何将数据建模为资源和(状态转换?)资源之间的链接。我相信我的问题是我的所有经验都是OO和RPC,我不习惯以资源为中心的思维方式。
获得理解的唯一方法是从我的世界中取一个例子,说出我认为可能看起来像是以资源/链接为中心的方式建模,然后把它扔到那里被火焰击落。烧伤完成后,我至少应该更好地理解我不理解的东西。
我的(简化)示例是:
我是承包商,例如一个水管工。 我分配了很多工作。 我可以搜索我的工作,指定简单的参数,例如目标日期范围。 我可以开始分配给我的任何工作。当我开始工作时,我可以选择指定我开始工作的时间,或者如果我现在开始工作则将其留空。
如果我以RPC方式实现这一点,我可能会向调用者公开两种方法:
ListOfJobs GetJobs(search parameters)
StartJobResult StartJob(jobID, optional start datetime)
如您所见,我正在考虑对象和操作。
如果我在考虑资源和链接,资源可能是什么?
我的猜测是:
假设上述任何一个是正确的(我怀疑是),那么“searchidentifier”和“attendanceidentifier”应该是什么?前者在我的RPC世界中没有身份;它只是参数。后者将由DateTime识别。
链接可能是什么(忽略自己的链接)?
如果这是一个重复的问题,请接受我的道歉并将其关闭。 (我找不到重复,但我可能一直在搜索错误的术语。)
答案 0 :(得分:0)
你可能已经读过这两本好书:
回到你的问题。更实际的思考或应用REST作为起点(至少对我有用)的方法是以下列方式思考:
1)仅使用HTTP“GET / POST / PUT / DELETE”作为建模域名“行动”的方式。就像处理数据库时一样,所有操作都映射到CURD。
2)URI / URL仅用于标识资源。不应该在URI中有任何“操作”。
3)交换的数据应该在HTTP消息的正文中。 只是为了简化讨论,而不是如何对数据本身进行建模
以下是我的想法。我确信有更好的方法来模拟你所拥有的东西,但它应该遵循相同的原则☺。 URL模式的外观取决于您的应用程序域以及客户端和后端之间的含义。
模拟“获取工作”:
模拟,求职:
模型将作业分配给用户:
使用PUT与POST存在一些差异,您可以搜索。
希望得到这个帮助。