【问题标题】:In a web service application, is verb-orientation still useful?在 Web 服务应用程序中,动词导向仍然有用吗?
【发布时间】:2012-09-25 18:11:40
【问题描述】:

感谢收看!

背景

我正在构建一个严格的机器对机器 Web 服务(restful)应用程序。应用程序将侦听请求、检索数据、构造对象、序列化为 JSON 并返回 JSON 对象。

此应用程序最终将被其他网络应用程序以及 iOS 应用程序、Android 应用程序甚至桌面应用程序使用。

我继承的现有代码根据 HTTP 动词(GET、POST 等)调用服务的方式进行区分。

问题

在当今机器对机器通信的时代,HTTP 动词是否不再重要?事实上,这是否会限制未来采用服务 API 以基于 HTTP 动词的代码?

更新

fmgp 为“为什么”使用这些动词提供了明确的答案,但我觉得我应该澄清我的担忧:

其他平台(例如 iOS 或 Android)是否能够发起基于 HTTP 动词的调用,例如 GETPOST?如果答案是“否”,那么我认为我们应该远离依赖这些动词,而是将所需的操作作为参数构建到请求 URL 中。

【问题讨论】:

  • 你能举个例子吗?我不确定,你的意思是像/getUser/123/putUser 这样的网址吗?只是听起来不太平静,我从来没有听说过这是一种练习。
  • 当然,如果我 GET "users/someUserId",代码会识别出请求是基于 get 的,并返回一个包含该用户信息的用户对象。如果我POST "users/someUserId" 并随帖子发送一个用户对象,例如从表单中提取的更改的名字,那么代码会使用新的名字更新数据库。
  • 好的,我答错了。我不知何故,虽然你的意思是服务的命名,即字面上使用 get/post 作为 url 的一部分。使用http方法是restful服务的核心概念。有时你甚至需要使用它,例如你不应该使用GET 来更新你的数据库,因为多个相同的请求可能会被中间服务器缓存。
  • 谢谢kapep,这很有道理。

标签: web-services rest asp.net-mvc-4 soa


【解决方案1】:

在 RestFul 应用程序中,你有一个动词 foreach CRUD 操作:

  • 创建:POST
  • 读取:获取
  • 更新:PUT
  • 删除:删除

所有声称“宁静”的东西都将根据这一理念以相同的方式运作。

这没有什么标准,只是一种干净、设计良好、易于理解的编程风格。当然,只要您的客户端和服务器可以处理,您可能希望只使用 GET 和一些查询参数来完成所有操作。

【讨论】:

  • 那,对 fmgp 有帮助,谢谢。我想看看其他人对结束这个问题的看法。再次感谢。
  • 其实不是这样的。 HTTP 动词不完全映射到 CRUD.GET 和 DELETE 是正确的,但是当目标 URI 由服务器确定(有时是部分更新)时创建 POST 并且当客户端设置 URI 时 PUT 是替换资源或创建资源
猜你喜欢
  • 2015-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-03
  • 1970-01-01
  • 1970-01-01
  • 2016-12-17
相关资源
最近更新 更多