gpt4 book ai didi

api - 如何安静地暴露相关的父子资源?

转载 作者:行者123 更新时间:2023-12-04 19:22:46 24 4
gpt4 key购买 nike

我正在设计一个 api,我希望允许用户和组保存搜索,但不确定如何最好地公开此信息。我提出了一些 URI 来公开它们:

# These are for CRUD the search definitions, not running the searches
1. /users/{username}/searches # lists the searches for a user
2. /users/{username}/searches/{search-name} # CRUD a specific user search
3. /groups/{groupname}/searches # lists the searches for a group
4. /groups/{groupname}/searches/{search-name} # CRUD a specific group search
5. /searches/{search-id|search-name}
6. /searches/group/{groupname}/{search-name}
7. /searches/user/{username}/{search-name}

我觉得公开所有那些 URI 是不对的。这意味着有两种方法可以更新或列出对用户和组的搜索:通过/groups/search,或通过/search/group。这也意味着更多的支持,我担心会出现细微的差异。

搜索可以是数据库中的独立记录,不与特定用户或组绑定(bind)(例如,默认系统搜索或上下文相关搜索)。

因为搜索可以是独立的,所以将它们公开为 /users/searches/groups/searches 感觉不对。同时,如果我在想,“鲍勃的搜索是什么?”我会首先想到 /users/bob/searches,因为从逻辑上讲,它是 bob 的 搜索。同样,如果我想备份 bob 的帐户,他的所有个人信息都应该在/users/bob 下。

那么,对于哪种方法更适合和/或对他们来说效果好(或不好),有人有建议吗?

最佳答案

我倾向于坚持

5. /searches/{search-id|search-name}
6. /searches/group/{groupname}/{search-name}
7. /searches/user/{username}/{search-name}

备份问题可以通过创建一个新资源来解决,该资源包含整个系统中 Bob 信息的链接,例如

GET /AccountData/Bob

<div class="AccountData">
<link rel="searches" href="/Searches/User/Bob"/>
<link rel="options" href="/Options/User/Bob"/>
<link rel="usagehistory" href="/History/User/Bob"/>
</div>

我的经验是,如果您尝试创建一个满足您所有使用场景的单一层次结构,您会把自己逼疯的。你就是做不到。这就是维基如此有效的原因,它们使用链接而不是层次结构来提供对信息的访问。

我建议您更多地关注在表示中将返回哪些链接。

例如

GET /Groups/{GroupName}

<div class="group">
<div class="name">AGroup</div>
<link rel="searches" href="/Searches/Group/AGroup"/>
</div>

使用这种方法,您就不太关心 URL 结构是什么样的。正如罗伊所说 here

A REST API must not define fixed resource names or hierarchies (an obvious coupling of client and server)

我意识到这似乎是一个极端的立场,考虑到 SO 上的每个人似乎都专注于您的 url 需要什么样的外观才能拥有 RESTful API,但您考虑得越多,它就越有意义。

附言请不要纠结于我选择 HTML 作为表示的媒体类型,我只是提请注意您并不总是需要使用自定义 XML 词汇表这一事实。

关于api - 如何安静地暴露相关的父子资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/584721/

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