以下URI是否在REST中有用?或者如何改进?
这是服务定义:(REST和SOAP - WCF)
[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Json, UriTemplate = "/Services?CostCentreNo={CostCentreNo}&Filter={Filter}")]
List<Services> GetServices(Int32 CostCentreNo, Int32 Filter);
这将给出一个示例URI:
http://paul-hp:1337/WCF.IService.svc/rest/Services?CostCentreNo=1&Filter=1
我有很多get方法。
和一些插入方法。 URI是否可接受。是否需要GET/
或其他内容?
修改 好的,现在我更加注意: 所以,如果我有一个子服务,它(可能)
/CostCenters/{CostCentreNo}/Services/{ServiceID}/SubService
并且,插入房间预订(超过20个参数)可以
/CostCentres/{CostCentreNo}/Rooms/{RoomNo}/Booking?param1={param1}....¶m20={param20}
答案 0 :(得分:2)
嗯...人们使用REST的原因之一是避免查询字符串中的任何其他而不是实际查询。在您的情况下,CostCentre可能应该拥有自己的URL,以及其服务的单独URL。根据您的示例,在我看来,只有Filter应该是一个查询字符串。
我会按如下方式构建您的网址:
/CostCenters/{CostCentreNo}/Services?Filter={Filter}
修改强>
好的,现在我更加注意:所以如果我有一个子服务,它 会(可能)
/CostCenters/{CostCentreNo}/Services/{ServiceID}/SubService and,
插入房间预订(超过20个参数)可能
/CostCentres/{CostCentreNo}/Rooms/{RoomNo}/Booking?param1={param1}....¶m20={param20}
如果可能的话,我建议授予可以存在于更靠近父层次结构的自己的URL上的各个实体。显然我不知道你的系统,但我的猜测是你可能想要做一些事情:
/CostCenters/{CostCenterNo} /Services/{ServiceID} /Rooms/{RoomNo}
仅使用
等层次结构/CostCenters/{CostCentreNo}/Services/{ServiceID}/
如果没有CostCenter,服务就不能存在。如果是这种情况,请务必使用这样的层次结构。如果服务可以在没有CostCenter的情况下存在,请使用上面的前一个层次结构。
最后一件事。您的示例中的此网址:
/CostCenters/{CostCentreNo}/Services/{ServiceID}/SubService
仅在服务可以只有一个SubService时才有意义。我打赌你的例子需要一个SubServiceID或类似的东西。按照上面的建议,我肯定会说SubService绝对需要扩展服务URL,例如:
/Services/{ServiceID}/SubServices/{SubServiceID}
在上面的例子中,我希望SubServiceID引用与ServiceID相同的实体池,并且该URL返回的任何数据或视图都包括Service和SubService。