我有几个Web服务调用,我无法想到使用REST的好方法 - 他们感觉就像'做'方法而不是数据操作。
一个是基本上对服务器说“向用户xyz重发确认电子邮件”,所以在SOAP中它可能是ResendConfirmationEmail(user)
。如何在REST中实现这一点;应该在URI中使用什么资源名称?
另一个是我们使用一些虚拟数据初始化数据库并返回其结果表及其行数,因此在SOAP中它可能是InitializeDatabase()
。同样,在REST中应该是什么样的URI,并且这仍然可以作为一个调用完成(执行初始化,并返回数据库摘要信息),还是必须分成两个调用(一个用于初始化,一个用于获取数据库)摘要信息)?
答案 0 :(得分:2)
重新发送(或发送此事件)不是幂等操作。这是POST
的直接指示。至于URI,我会推荐一些
POST /user/1234/mailbox
如果您真的想要超越,并且您的应用程序执行某种内部日志记录或具有到您的邮件队列的接口,那么将GET
请求发送到新创建的资源也可能会很不错(例如GET /user/1234/mailbox/<EMAIL ID>
并查看电子邮件的状态)。这显然是一个钟声和哨声的功能,但它让你思考RESTful资源的思维模式,即使在看似非典型的情况下。
与#1不同,初始化数据库将被视为幂等,但显然不安全。 PUT
是天生的候选人。作为Mr. Fielding himself put it,PUT并不一定意味着存储某些东西。这就是一个例子。对于URI,我建议使用一个标识您的系统或应用程序的URI。可能类似/my-app-name
或类似/conf
或/system
的通用内容。人们甚至可以使用/
进行辩论。您甚至可以在PUT
请求的正文中传递配置选项。
至于获取系统的状态,我建议只对相同的URI进行单独的GET
请求,但是我想不出为什么你也不能只包括这个作为PUT
回复的一部分的相同摘要。
附注:对于这种不安全的东西,你肯定要确保你有一个坚实的身份验证层。