我已经在网上阅读有关 REST 的好几天了,并且正在努力理解 HATEOAS 的概念。
我认为我正在挣扎,因为我没有正确理解如何将数据建模为资源以及资源之间的(状态转换?)链接。我相信我的问题是我所有的经验都是OO和RPC,我不习惯以资源为中心的方式思考。
获得理解的唯一方法是从我的世界中举一个例子,说出我认为可能看起来像以资源/链接为中心的方式建模的内容,然后将其扔到那里被击落。烧录完成后我至少应该对我不明白的地方有更好的理解。
我的(简化的)示例是:
我是承包商,例如水管工。
我有很多工作分配给我。
我可以指定简单的参数(例如目标日期范围)来搜索我的职位。
我可以开始分配给我的任何工作。当我开始工作时,我可以选择指定开始它的时间,或者如果我现在开始它,则将其留空。
如果我以 RPC 方式实现这一点,我可能会向调用者公开两种方法:
ListOfJobs GetJobs(search parameters)
StartJobResult StartJob(jobID, optional start datetime)
正如你所看到的,我正在思考对象和操作。
如果我在考虑资源和链接,资源可能是什么?
我的猜测是:
- 承包商:〜/承包商/管道工?
- 求职:〜/承包商/管道工/搜索/搜索标识符?
- 工作:〜/工作/12345?
- 考勤:~/job/12345/attendances/考勤标识符?
假设上述任何一项都是正确的(我怀疑它是正确的),“searchidentifier”和“attendanceidentifier”应该是什么?前者在我的 RPC 世界中没有身份;它只是参数。后者将由日期时间标识。
链接可能是什么(忽略指向自身的链接)?
- 承包商:〜/承包商/管道工/搜索?
- 求职:~/job/12345、~/job/12346 等?
- 工作:~/job/12345/出勤?
- 出席人数: ?
如果这是一个重复的问题,请接受我的歉意并将其关闭。 (我找不到重复的内容,但我可能一直在使用不正确的术语进行搜索。)
您可能读过这两本好书:
回到你的问题。更实用的思考方式或应用 REST 作为起点(至少对我有用)是按以下方式思考:
1) 仅使用 HTTP“GET/POST/PUT/DELETE”作为对域“操作”进行建模的方式。就像处理数据库时一样,您的所有操作都映射到CURD http://en.wikipedia.org/wiki/Create,_read,_update_and_delete.
2) URI/URL 仅用于标识资源。您的 URI 中不应该有任何“操作”。
3) 交换的数据应该在HTTP消息体中。
只是为了简化讨论,而不是讨论如何对数据本身进行建模
这是我想到的。我确信有更好的方法来模拟你所拥有的东西,但它应该遵循相同的原则☺ URL 模式的外观完全取决于您的应用程序域以及客户端和后端之间的意义。
模拟“找到工作”:
- HTTP:获取
- 网址:~/contractors/[plumberID]/jobs/
模特、求职:
- HTTP:获取
- URL: ~/jobs/?[一些搜索参数]/
要对将作业分配给用户进行建模:
- HTTP:放置
- URL:〜/承包商/[管道工ID]/作业/[作业ID]
使用PUT和POST有一些区别,你可以搜索一下。
希望这有帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)