Xml 如何为RPC方法具有重载含义的Web服务设计RESTAPI?

Xml 如何为RPC方法具有重载含义的Web服务设计RESTAPI?,xml,rest,Xml,Rest,现有XML Web服务 处理XML-RPC样式的请求,其中包含标识要分派到的方法的操作元素。例如: 810 参数的数量各不相同 XML-RPC处理程序将810标记解释为两种含义。如果它收到一个元素作为的子元素,它将创建一个帐户。如果它收到元素,它将尝试登录用户 新的JSON REST API设计 我想把它保存到一个REST端点,例如/api/foobar 我可以将用户创建转换为PUT/api/foobar/${user} 用户删除到DELETE/api/foobar/${user} 我当前

现有XML Web服务

  • 处理XML-RPC样式的请求,其中包含标识要分派到的方法的操作元素。例如:

    810

  • 参数的数量各不相同

  • XML-RPC处理程序将810标记解释为两种含义。如果它收到一个元素作为的子元素,它将创建一个帐户。如果它收到元素,它将尝试登录用户
新的JSON REST API设计

  • 我想把它保存到一个REST端点,例如/api/foobar
  • 我可以将用户创建转换为PUT/api/foobar/${user}
  • 用户删除到DELETE/api/foobar/${user}
  • 我当前的设计是使用一个主体{“op”:“login”}来进行POST/api/foobar/${user}登录,同样地,对于注销,主体{“op”:“logout”}将被发送

你们怎么看这个?砖块和花束受到建设性评论的欢迎。

如果可以避免的话,RESTful API的重载帖子有点麻烦。出于登录的目的,我更愿意尝试保持无状态——这意味着要求客户端在每个请求上传递HTTP授权(这意味着每次传递正确的授权头)。您在第一次请求时使用一种常用的身份验证方法,如Basic。

对于所有CRUD操作,端点应位于URI
api/users
。使用HTML4构建的表单不支持删除和放置,但是如果您使用Javascript进行通信,那么您就可以了,但您可能也希望通过POST公开创建和删除操作(可能会在POST负载中传递
\u method=PUT | DELETE

对于登录,端点应该是
api/login
,但是您最好在这里使用HTTP身份验证


要求对堆栈溢出进行设计审查是很好的,但最好阅读RESTful体系结构,以避免错误的转向。

类似这样的登录和注销操作如何

POST /api/foobar/${user}/loginrequests

POST /api/foobar/${user}/logoutrequests

如果您不想,服务器实际上不必创建“请求”资源,但稍后您可能会改变主意,希望保留登录和注销记录。

我想使用HTTP auth并使用HTTP协议提供的所有资源库,但我正在与一群希望快速完成任务的人合作(例如,仅使用最少数量的HTTP动词)。谢谢你的想法。据我所知,在URI中放置操作是不好的做法。你完全正确。但是,我没有在URI中放置操作。如果我放置了/RequestLogin,那么这将是一个操作。/RequestLogin或/loginrequests没有任何影响。它也可以是/0f5cb891-6d64-49e7-9e5d-4B5B37F9A8,这没关系。重要的是互动模式,而不是整个名称/动词。它可以是一种气味,但肯定不是必要的。