api - 根据 REST API 规范,以下哪些是有效的 URI(统一资源标识符)?
问题描述
如何根据 REST API 规范识别以下哪个统一资源标识符 (URI) 是有效的。
选择一个或多个选项
1. POST https://api.example.com/whales/create/9xf3df
2. PUT https://api.example.com/whales/9xf3df
3. GET https://api.example.com/whales/9xf3df?sort=name&valid=true
4. DELETE https://api.example.com/whales
解决方案
REST 不关心您为资源标识符使用的拼写约定;任何符合RFC 3986定义的生产规则的东西都可以。
/whales/create/9xf3df
/whales/9xf3df
/whales/9xf3df?sort=name&valid=true
/whales
/0cc846bb-678d-45d8-9c06-d9cf94cee0a5
/9xf3df/whales
这些都是很好的标识符。
“REST API”的标识符与网页的标识符完全一样——你可以使用任何你想要的拼写,浏览器、缓存、网络爬虫等都可以很好地使用它们;这些通用组件将标识符视为标识符——它们不会尝试从中提取任何含义。
通过演示,请注意以下所有操作都完全按照您的预期方式工作:
- https://www.merriam-webster.com/dictionary/create
- https://www.merriam-webster.com/dictionary/get
- https://www.merriam-webster.com/dictionary/put
- https://www.merriam-webster.com/dictionary/post
- https://www.merriam-webster.com/dictionary/patch
- https://www.merriam-webster.com/dictionary/delete
REST 是否关心上述选项的 POST、PUT、GET 和 DELETE?
很难确定你在这里问的是哪个问题。
PUT /dictionary/delete HTTP/1.1
这是一个完全令人满意的请求行,它的含义没有歧义。在此示例中, PUT 是方法令牌;这告诉服务器我们正在请求将目标资源的表示(由 标识/dictionary/delete
)替换为请求的消息正文中包含的表示
对于这个特定的资源,这可能意味着消息体是一个 HTML 文档(我们会Content-Type: text/html
在标题中看到,以确保服务器知道如何正确解释提供的字节)。
PATCH /dictionary/delete HTTP/1.1
这也是一个令人满意的请求行;我们再次请求对/dictionary/delete
资源的表示进行更改,但我们将以稍微不同的方式进行处理 - 我们不是在消息正文中包含替换表示,而是提供要进行的更改列表的表示(又名“补丁文件”)。
统一的界面意味着我们应该期望人们www.merriam-webster.com
能够完全按照我们在此处描述的那样理解这些消息。
现在,对于这些特定资源,他们可能不希望随机堆栈溢出成员对其网站进行更改,因此他们可能会响应403 Forbidden或405 Method Not Allowed。
所有通用组件都将理解这意味着什么,因为标准化的响应元数据对所有资源都是通用的。
推荐阅读
- c++ - 构建库 matio 时,configure 脚本抛出错误“C 编译器无法创建可执行文件”
- bash - 多个 grep 和分组输出
- python - 来自外键的字段未在 django admin 中显示数据
- javascript - 如何在每 n 个字符处或最近的前一个空格处拆分字符串
- python-3.x - 如何从不和谐的网络块嵌入中获取文本
- java - Android Studio:编译时错误:原因:org/apache/commons/io/FileUtils
- qt - 将 Qt 中的 .pro 行转换为 cmake 行
- javascript - 查找和更新子文档,如果不存在则创建新的
- amazon-web-services - 将文件移动到 Glacier 是否会导致在 S3 中使用同步进行新的上传?
- c++ - 更改按钮颜色