RESTful端点和数据库关系
我对RESTful开发是新手。我正在开发一个小应用程序(使用SpringBoot),它显示州、地区和省份的列表。这是我的数据库图: 我在为资源创建端点时遇到问题。 创建这些端点是正确的:RESTful端点和数据库关系,rest,restful-architecture,restful-url,Rest,Restful Architecture,Restful Url,我对RESTful开发是新手。我正在开发一个小应用程序(使用SpringBoot),它显示州、地区和省份的列表。这是我的数据库图: 我在为资源创建端点时遇到问题。 创建这些端点是正确的: /api/states **//List of all countries** /api/states/{id} **//Show the single country** /api/states/{id}/regions **//Show all regions** /api/states/{
/api/states **//List of all countries**
/api/states/{id} **//Show the single country**
/api/states/{id}/regions **//Show all regions**
/api/states/{id}/regions/{id} **//Show the individual region**
/api/states/{id}/regions/{id}/provinces **//Show all provinces**
/api/states/{id}/regions/{id}/provinces/{id} **//Show the individual province**
我意识到我的结束点太长了,我认为这不是正确的过程。
根据你的经验,你能推荐什么建议?
多谢各位
上面的端点是好的
问题存在于嵌套的其余部分。假设区域和省ID是全局唯一的,则可以以相同的方式将它们展平(不包括州)
下面是一个例子:
/api/regions/{id} //Show the individual region
/api/regions/{id}/provinces //Show all provinces
/api/provinces/{id} //Show the individual province
/api/provinces/{id}/towns //Show all towns
上面的端点是好的
问题存在于嵌套的其余部分。假设区域和省ID是全局唯一的,则可以以相同的方式将它们展平(不包括州)
下面是一个例子:
/api/regions/{id} //Show the individual region
/api/regions/{id}/provinces //Show all provinces
/api/provinces/{id} //Show the individual province
/api/provinces/{id}/towns //Show all towns
在某种程度上,我完全同意你: /api/状态-是,列出所有状态
/api/states/{id}-是,显示一个状态
/api/states/{id}/regions-是的,只是处于该状态的区域 但现在我要走这条路: /api/regions/{id}-显示一个区域
/api/regions/{id}/省-显示该地区的所有省
/api/省/{id}-显示一个省
我发现,每个请求只需要一个{id}。在某种程度上,我完全支持您: /api/状态-是,列出所有状态
/api/states/{id}-是,显示一个状态
/api/states/{id}/regions-是的,只是处于该状态的区域 但现在我要走这条路: /api/regions/{id}-显示一个区域
/api/regions/{id}/省-显示该地区的所有省
/api/省/{id}-显示一个省 我发现,每个请求只需要一个{id}。好吧(在查看数据库模式之后),我想您所有的
州
、地区和省
都已经有了唯一的标识符,您只需从州
以外的所有资源中修剪/api/states
。这与使用查询参数筛选特定ID的省份
/地区
的事实相结合
因此,将以以下端点结束
+----------------------------------------------+---------------------------------------------------------+
| Endpoint | Description |
+----------------------------------------------+---------------------------------------------------------+
| `/api/state` | Get a list of States |
| `/api/state/<id>` | Get a specific State |
| `/api/region` | Get a list of regions |
| `/api/region?state_id=<id>` | Get a list of regions from a specific state |
| `/api/region/<id>` | Get a specific region |
| `/api/province` | Get a list of provinces |
| `/api/province?state_id=<id>®ion_id=<id>` | Get a list of provinces based on state_id and region_id |
| `/api/province/<id>` | Get a specific Province |
+----------------------------------------------+---------------------------------------------------------+
+----------------------------------------------+---------------------------------------------------------+
|端点描述|
+----------------------------------------------+---------------------------------------------------------+
|`/api/state`|获取状态列表|
|`/api/state/`|获取特定状态|
|`/api/region`|获取区域列表|
|`/api/region?state_id=`|从特定状态获取区域列表|
|`/api/region/`|获取特定区域|
|`/api/province`获取省份列表|
|`/api/province?state_id=®ion_id=``根据state_id和region_id获取省份列表|
|`/api/province/`|获取特定的省|
+----------------------------------------------+---------------------------------------------------------+
现在,随着这些路由/端点的布置,如何通过API实际创建这些资源也变得很明显。如果API的客户端知道资源的结果,则可以使用POST
或PUT
另外,请考虑@roman vottner在上面的评论中所说的话。好吧(在查看数据库模式之后),我想您的中的所有状态都是
,地区
和省份
已经有了唯一的标识符,您只需从除州
以外的所有资源中修剪/api/states
。这与使用查询参数筛选特定ID的省份
/地区
的事实相结合
因此,将以以下端点结束
+----------------------------------------------+---------------------------------------------------------+
| Endpoint | Description |
+----------------------------------------------+---------------------------------------------------------+
| `/api/state` | Get a list of States |
| `/api/state/<id>` | Get a specific State |
| `/api/region` | Get a list of regions |
| `/api/region?state_id=<id>` | Get a list of regions from a specific state |
| `/api/region/<id>` | Get a specific region |
| `/api/province` | Get a list of provinces |
| `/api/province?state_id=<id>®ion_id=<id>` | Get a list of provinces based on state_id and region_id |
| `/api/province/<id>` | Get a specific Province |
+----------------------------------------------+---------------------------------------------------------+
+----------------------------------------------+---------------------------------------------------------+
|端点描述|
+----------------------------------------------+---------------------------------------------------------+
|`/api/state`|获取状态列表|
|`/api/state/`|获取特定状态|
|`/api/region`|获取区域列表|
|`/api/region?state_id=`|从特定状态获取区域列表|
|`/api/region/`|获取特定区域|
|`/api/province`获取省份列表|
|`/api/province?state_id=®ion_id=``根据state_id和region_id获取省份列表|
|`/api/province/`|获取特定的省|
+----------------------------------------------+---------------------------------------------------------+
现在,随着这些路由/端点的布置,如何通过API实际创建这些资源也变得很明显。如果API的客户端知道结果,则使用POST
或PUT