gpt4 book ai didi

web-services - 我应该在 URL 中提供父资源名称还是在 RESTful WS 中不提供?

转载 作者:行者123 更新时间:2023-12-04 05:56:14 25 4
gpt4 key购买 nike

我正在使用 PHP 和 apache 开发一些基本的 Restful Web 服务,我想知道是否应该构建提供父实体名称的 URL。让我更好地解释一下:

我有 2 个实体,假设 国家城市 .我现在只是提供 WS 来获取、创建、更新或删除 城市 但 API 不支持 国家通过 WS 进行操作。我正在使用 重新映射网址mod_rewrite 我在 api 中提供以下网址来操纵城市:

. GET     /api/countries/<country_id>/cities            cities of country with id <country_id>

. GET /api/countries/<country_id>/cities/<city_id> city with id <city_id>

. POST /api/countries/<country_id>/cities add a city to country with id <country_id>

. PUT /api/countries/<country_id>/cities/<city_id> update the city whose country has id <country_id>

. DELETE /api/countries/<country_id>/cities/<city_id> delete city ...

我开始仔细查看这些 url,但我对是否应该提供父实体名称和 id 感到困惑。我做了一个很好的假设,城市不能分配给多个国家,即它不是多对多的关系。假设这一点,我认为可以为许多 API 函数提供更短的 URL 模式。例如,如果客户想要删除某个城市,那么他发送:
. DELETE /api/cities/14

我知道一个城市属于一个国家,客户端在提出请求之前不需要找出国家 ID。

除了第一个(获取所有国家的城市)之外,大多数 url 都可以转换为这种较短的 url。

这是我第一次开发 Web 服务,我还没有阅读太多关于它的内容,所以我可能会误解一些东西。我能得到一些建议吗?非常感谢,并为我的基本英语感到抱歉。

EDIT1:我认为这个问题可以概括为“我应该如何处理 API url 中的实体关系?”

最佳答案

“我应该如何处理 API url 中的实体关系?”别。而是使用您响应的资源中的链接。

例如,如果我在 /cities/612 上执行 GET我可能会回来

{ 'city': 
{
'id': 612,
'self': '/cities/612',
'name': 'Sydney',
'country': { 'name': 'Australia', 'href': '/country/61' },
'region': { 'name': 'Asia Pacific', 'href': '/region/12' },
'delete': {
'method': 'delete',
'href': '/cities/612'
},
'update': {
'method': 'put',
'href': '/cities/612',
...
},
...
}
}

这允许您拥有任何您喜欢的实体关系,而不必担心您的 URL。您还可以轻松添加新关系,而不会破坏现有客户。例如,如果您想添加“行星”的新关系,请访问 /cities/612现在可能提供
{ 'city': 
{
'id': 612,
'self': '/cities/612',
'name': 'Sydney',
'country': { 'name': 'Australia', 'href': '/country/61' },
'region': { 'name': 'Asia Pacific', 'href': '/region/12' },
'planet': { 'name': 'Earth', 'href': '/planet/1' },
'delete': {
'method': 'delete',
'href': '/cities/612'
},
'update': {
'method': 'put',
'href': '/cities/612',
...
},
...
}
}

看看 A RESTful Hypermedia API in Three Easy Steps更多细节。

关于web-services - 我应该在 URL 中提供父资源名称还是在 RESTful WS 中不提供?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9488184/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com