实现GET REST API的最佳方法是为了检查数据库中是否存在给定的URL。
每个获取请求将具有以下部分:主机名,端口,原始,路径和查询。
我的想法是设置资源如下。
/urlservice/1/{hostname}/{port}/{origin}/{path}/{query}
,但这似乎很详细,因为它将导致资源URL,例如:
/urlservice/1/google.com/80/"https://google.com/"/"/search"/"?q=aba"
什么是设计它的更好方法?
设计URI结构时的主要警告是您遵循URI规格。话虽如此,从结构上看URI规格,它有几个重要说明可以帮助您解决您的问题:
1.2.3。分层标识符
URI语法是按层次组织的,其中列出了从左到右的意义下降的顺序。对于一些URI方案,可见的层次结构仅限于该计划本身:考虑方案组件定界符之后的所有内容(":; quot"(被考虑不透明对URI处理。其他URI计划使层次结构通用解析算法明确且可见。
通用语法使用Slash("/quot"(,问号("?"(和
数字符号("#&quot"(字符为
的定界组件对通用解析器的层次结构解释很重要标识符...
现在就查询字符串:
3.4。查询
查询组件包含非层次数据,以及路径组件中的数据(第3.3节(,用于识别在URI计划和命名范围内的资源(如果有(。查询组件由第一个问题指示标记("?"(字符,并由数字符号终止("#&quot(字符或在URI结束时...
使用上述内容,查看您的URI,您需要确定您的结构是层次结构还是不遵循URI规格以满足休息。当然,这里有一些主观性,但是查看您所拥有的内容,大多数(如果不是全部(参数看起来像是在查询字符串中使用的候选人,因为它是非层次结构的。为此,我建议将它们移至查询字符串。
/urlservice/1?hostname={hostname}&port={port}&origin={origin}&path={path}&query={query}
再次,由于有一些主观性,并且您比其他人更好地了解您的领域,请使用上述指导并做出最佳判断。
您可以将其分解为基于服务,而不是指定请求中的所有内容:
/urlservice/1/{service}/{request}
服务将是"基于服务"的,因此Google搜索服务将知道如何构建Google搜索URL:
/urlservice/1/google/aba
将解决:
https://google.com/search/?q=aba
由Google服务。这也意味着,如果Google更改其服务参数,所有客户端都不必更改。只有Google服务才能改变其对URL构建器的内部实现。