给出以下类(注意:这些类没有讨论,它们只是以这种方式存在)
class Foo {}
class Bar {}
class Event {
Foo foo;
Bar bar;
String event;
public Event(Foo foo, String event){
..
}
public Event(Bar bar, String event){
..
}
}事件与Foo或Bar相关联,但从来不与两者相关联。
您会对REST建模吗(对于api的用户来说,这或多或少是自然的):
POST /foo/{FOO-ID}/event
GET /foo/{FOO-ID}/event --> gets the list of events for FOO with the given id
GET /foo/{ID}/event/{EVENT-ID}
POST /bar/{BAR-ID}/event
GET /bar/{BAR-ID}/event --> gets the list of events for BAR with the given id
GET /bar/{BAR-ID}/event/{EVENT-ID}或者您更喜欢(多少反映域模型):
POST /event
GET /event?id=123&type=FOO --> gets the list events of for FOO with id = 123
GET /event?id=456&type=BAR --> gets the list of events for BAR with id = 456
GET /event/{EVENT-ID}
GET /event --> not implemented, it would logically return ALL events(both FOO and BAR), but this has no business meaning在两个api中,哪一个是“最”休息的?为什么?
发布于 2013-10-08 15:48:37
从您的模型来看,Event本身就是一个实体和一个资源。
第一种方法发送了一个不同的信息:从这个角度来看,Event是Foo或Bar的子资源,这意味着它依赖于其中的一个存在,如果它的“父”不再存在,那么它也存在。
现在我不认为你的模型有这样的关系。当然,如果没有Event /Bar,可能是没有意义的,但它确实有单独的意义。明天,Event可能会与其他新的实体相关,所以依赖它们的是Event,当它开始跟踪它们时,Event应该改变,而不是相反。
最后,查询参数的使用对于算法资源或集合的“范围”筛选器是常见的,这是您的第二个场景。
如果Foo或Bar作为类具有Event类型的属性,则可以应用第一种方法。
这两种方法都是"RESTFul“。粗略地说,REST是指以正确的方式使用HTTP方法,并使用唯一的URI来标识唯一的资源。问题是,第二种方法更好地将模型(及其关系)描述为一组资源。
https://stackoverflow.com/questions/19251855
复制相似问题