Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用group by的rest命名约定_Java_Api_Rest_Naming Conventions - Fatal编程技术网

Java 使用group by的rest命名约定

Java 使用group by的rest命名约定,java,api,rest,naming-conventions,Java,Api,Rest,Naming Conventions,我正在研究rest端点,它必须返回按“州”分组的“所有可用城市”。 我返回以下对象: @Builder @Data class CitiesByState { Map<String, List<Cities>> citiesByStateName; } ?因为状态名称用作键 我宁愿 http://url/api/states/{statename}/cities,它还启用REST的cacheable约束 在这方面已经描述了很多假设您有一个集合资源/cities,

我正在研究rest端点,它必须返回按“州”分组的“所有可用城市”。 我返回以下对象:

@Builder
@Data
class CitiesByState
{
    Map<String, List<Cities>> citiesByStateName;
}

因为
状态名称
用作键

我宁愿
http://url/api/states/{statename}/cities
,它还启用REST的
cacheable
约束


在这方面已经描述了很多

假设您有一个集合资源
/cities
,其中列出了所有城市。 进一步假设一个城市有许多属性(如州、人口等)

作为客户机(REST消费者,就像JavaScript驱动的web应用程序一样),您不想让选择组的哪个属性吗

将资源耦合到URI标识的表示 您的方法通过为此城市资源的表示预定义来限制这种灵活性。 像州划分的城市一样。但这将要求固定耦合,因为分组现在也取决于客户端和服务器的实现。每次更改用例的客户端分组时,您也必须调整服务器端

将分组委托给客户端 部署应用于:

关注点分离是客户机-服务器约束背后的原则。通过将用户界面关注点与数据存储关注点分离,我们提高了用户界面跨多个平台的可移植性,并通过简化服务器组件提高了可伸缩性

好处:通过在客户端执行分组,您将保持更大的灵活性。 应用这种关注点分离将客户机与服务器分离:

  • 服务器端接口提供对存储数据的访问。此处:按城市划分的城市原始列表。可能单独为可用组提供一个资源,该资源可能在每个城市内显示为属性:
    /states
  • 客户端框架(无论是Python脚本还是JavaScript web应用程序)可以对数据进行分组,将简单的城市列表转换为分组列表、树、地图或其他内容
  • 客户如何分组: 以下JavaScript伪代码的灵感来自:

    constgroupby=(x,f)=>x.reduce((a,b)=>((a[f(b)]| |=[])。push(b,a),{});
    var cities=restApi.get(“/cities”);
    var citiesGroupedByState=groupBy(城市,c=>c.state)
    
    哪些公约? REST(在罗伊·菲尔丁的论文中)和(以及蒂姆·伯纳斯·李)都没有预见到命名约定:

    路径组件包含通常以分层形式组织的数据,这些数据与非分层查询组件(第3.4节)中的数据一起用于标识资源[…]

    参见澳大利亚政府API标准第节:

    URL必须遵循如下所述的标准命名约定:

    /namespace/project-name/v1/collection?attributes=first_name,last_name
    \___________________________________/\______________________________/
                 |                                  |
                path                              query
    
    您可能会问,当查询URL时,客户端如何请求特定的表示(响应类型,如分组的
    映射

    用罗伊·T·菲尔丁的沉思回答道:

    REST API应该永远不会有对客户端重要的“类型化”资源。规范作者可以使用资源类型来描述接口后面的服务器实现,但这些类型必须与客户机无关且不可见。对客户机重要的唯一类型是当前表示的媒体类型和标准化关系名称


    我喜欢您的解决方案,但是客户端应该调用1次以检索所有状态(50次),我们应该调用API states/{statename}/cites(50次)。我们是否受到性能问题的影响?对于这种情况,只使用cities api URL,而不使用状态参数更合适<代码>http://url/api/cities
    /namespace/project-name/v1/collection?attributes=first_name,last_name
    \___________________________________/\______________________________/
                 |                                  |
                path                              query