我对你的问题有点困惑,所以我会尽可能全面,希望我能找到你需要的答案=P。
我经常发现所需的数据是跨多个资源的视图的组合。您希望客户端将它们组合起来,还是提供一个 API 来为客户端进行组合?
在真正的 RESTful 环境中,数据的所有横截面视图都将由服务器完成,而不是由客户端完成。
RESTful 设计的主要原因是允许通过使用标准 HTTP 动词(例如、、、、)访问 CRUD 模型(创建、读取、更新、删除)。将这些方法的返回存储在某种会话或 cookie 或其他外部方法中(例如,“给我 bob 的数据”、“给我关于企业的数据”、“给我前两个查询的数据”)超越了REST 方法论。 GET
POST
PUT
DELETE
您希望利用 RESTful 开发的方式是找到以有意义的方式组合资源的方法,以便提供方法调用一致的 RESTful 环境;GET
读取数据、POST
创建数据、PUT
更新数据、DELETE
删除数据)。
因此,如果您想执行步骤 1 到 4 之类的操作,我建议您执行以下操作:
GET /user/{userID}/organizations --> {return all affiliated organizations}
GET /user/{userID}/events --> {return all events associated with userID}
GET /organizations/{organization}/events --> {returns all eventID's assoc. with organization}
GET /user/{userID}/savedevents --> {return all eventID's userID saved to their profile}
GET /events/?eventID=(15,16,20,35,36) --> {return all of the events details for those eventID's}
GET /events/{eventID}--> {return events details for {eventID}}
而您可能还有:
GET /events/ --> {return a complete listing of all event ID's}
GET /events/{userID} --> {return all events userID is associated with}
POST /event/ --> {create a new event - ID is assigned by the server}
POST /user/ --> {create a new user - ID is assigned by the server}
PUT /user/{userID} --> {update/modify user information}
然后,如果您想要横截面的信息切片,您将拥有横截面的命名资源(否则将其作为参数传递)。明确使用您的资源(随机仅供参考,仅将您的资源命名为名词 - 而不是动词)。
你还问:
进一步解释。我犹豫是因为我可以看到 /organizations/123/events 是一个干净的资源;if 等同于说/events?organizations=123,即“给我组织=123 的资源事件”。/user/100/organizations 也一样。
本质上,named resourced
和resource + argument
方法都可以提供相同的信息。通常,我只在需要重要描述(范围请求、日期请求、一些非常小的数据单元等)时才看到 RESTful 设计 API 调用参数。如果您有一些可以进一步解析/自省的高阶数据分组,那么它就是一个命名资源。在您的示例中,我将同时使用 API 调用,因为 RESTful 规范要求通过多个路径和使用已建立的 HTTP 方法提供数据。不过,我也想扩大一点......
/events?organizations=123 --> {return the eventID's associated with org=123}
/organizations/123/events --> {return event DETAILS for events associated with org=123}
阅读/阅读此内容,作者:Apigee