Java Restful服务命名约定?
对于restfull服务,名词是否可以省略和丢弃 而不是Java Restful服务命名约定?,java,rest,Java,Rest,对于restfull服务,名词是否可以省略和丢弃 而不是/service/customers/555/orders/111 我可以/应该公开:/service/555/111 第一个选项是强制性的还是有几个选项,这是有争议的?在某种程度上,命名RESTful端点的“规则”应该遵循与“干净代码”相同的命名规则 意思:名字应该有意义。他们应该说他们的意思,说他们的意思 来自那里:这可能取决于该服务的性质。如果您只能“服务”客户,那么您可以省略客户部分,因为这不会添加(很多)有意义的信息。但是如果你以
/service/customers/555/orders/111
我可以/应该公开:/service/555/111
第一个选项是强制性的还是有几个选项,这是有争议的?在某种程度上,命名RESTful端点的“规则”应该遵循与“干净代码”相同的命名规则
意思:名字应该有意义。他们应该说他们的意思,说他们的意思
来自那里:这可能取决于该服务的性质。如果您只能“服务”客户,那么您可以省略客户部分,因为这不会添加(很多)有意义的信息。但是如果你以后想为其他类型的客户服务呢
换句话说:我们无法告诉您什么适合您的应用程序,因为这取决于您环境的需求/目标
值得注意的是:不要只考虑今天的要求。退后一步,考虑那些看起来最有可能的“未来成长道路”。然后确保您今天定义的API能够很好地与未来最有可能出现的扩展配合使用。这完全取决于您,我认为拥有这些名词的好处在于,它可以帮助您从URL中看到服务试图实现的目标 还要考虑到,在“客户”下,您可以有如下内容,并且可以从URL中区分客户的订单和报价
- /服务/客户/555/quote/111
- /服务/客户/555/订单/111
- 如果您想添加产品、收据或其他实体,省略名词会使您难以扩展服务
- 拥有低于客户的订单让我感到惊讶(但再一次,这取决于您设计的服务)。我希望看到类似于
和/service/customers/555
的东西/service/orders/1234567
- REST的一个核心方面是URL应被视为不透明实体。客户端应该永远不要创建URL,只使用服务器提供的URL。只有托管实体的服务器需要了解URL结构
因此,在设计服务时,请使用对您最有意义的URL方案
关于你提到的选项:
如果在URL中提供长路径对您来说是一个问题,那么可以在请求主体中提供上下文信息 我认为短途
/service/555/111
缺乏一致性
假设/service/555/111
对应于为客户555
和订单111
调用服务。
你知道的。但是API的客户机不一定知道路径的含义是什么
此外,假设现在您希望为客户调用相同的服务555
,但为2018年2018
。现在怎么办?就像这样:
/service/555/2018
很容易出错,因为您必须添加一个参数来传递最后的路径值,service/555/years/2018
会使API定义不一致
清晰、简单和一致性很重要 请遵循最佳实践。根据我的说法,名词的使用是不必要的,也不符合任何标准,但它的使用可以帮助您的端点更具体、更容易理解 所以,如果任何命名法使你的URL更容易让人阅读或理解,那么我通常更喜欢创建并保持简单的类型或URL。它还帮助您的服务消费者了解任何服务的功能,部分是通过名称本身 对于restfull服务,名词是否可以省略和丢弃 对。REST不关心资源标识符的拼写 URL缩短器工作得很好 拼写的选择是由当地惯例决定的,从这个意义上讲,它们很像变量 理想情况下,拼写独立于基础域和数据模型,因此您可以在不更改api的情况下更改模型。吉姆·韦伯用这种方式表达了这个想法 网络不是你的领域,它是一个文档管理系统。所有HTTP谓词都适用于文档管理域。URI不映射到域对象,这违反了封装。工作(例如:向域模型发出命令)是管理资源的副作用。换句话说,这些资源是反腐败层的一部分。集成域中的资源应该比业务域中的业务对象多得多 资源使您的域模型适应web
也就是说,如果您希望客户机在您的文档中发现URI(而不是从指定的超媒体响应中读取),那么使用遵循简单概念模型的URI拼写将是一个好主意。完全由您决定。如果你在路径中找到了名字,那么就把它们放在那里吧。我注意到你的问题仍然是“开放的”——因为你没有接受答案。请看一看,然后决定是否要回答。或者让我知道是否有什么我可以做的,以加强我的投入,使其值得接受。接受帮助未来的读者确定问题是否得到解决,并表示感激