- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在设计一个 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/
You can run gdb without printing the front material, which describes gdb's non-warranty, by specifyi
我有一个 ant 构建文件,它通常在完全不同的环境中运行。默认情况下,我正在寻找与使用相同的行为: ant -q 但是,由于某些团队成员的配置不同,因此在每个人的环境中指定 -q 选项并不容易以统一的
我正在使用一个存储库,其中包含许多使用 create-react-app 创建的 Node 包,所有这些都是由 CI 系统构建和测试的。每个包的构建/测试,使用 react-scripts build
我读过有关浮点的内容,并且了解 NaN 可能是由运算产生的。但我无法理解这些到底是什么概念。它们有什么区别? C++编程时可以生成哪一个?作为一名程序员,我可以编写一个导致 sNaN 的程序吗? 最佳
我是一名优秀的程序员,十分优秀!