我正在开发一个客户端 - 服务器Web服务。 前端使用html/javascript/jquery/jqm
构建,后端使用php/mysql
构建。
当客户端启动时,它有static id
(从不更改)和dynamic-token
(这意味着它可能会也可能不会更改)。出于这个原因,每次客户端启动我们将他注册到我们的服务器时,我们向我们的服务器发出POST
请求,在我们的服务器中,我们有一个带有id and token
的JSON文件。 post请求是一个如下所示的php脚本:myserver.com/register.php
,php脚本接受id and token
并查询数据库以查看它们是否存在。如果id
不存在creates
新记录。如果存在,则会检查token
是否已更改为updates
。
从客户端,用户可以订阅许多事件(比方说10)。事件显示在带有复选框的列表中。用户检查他希望订阅的事件并按下订阅按钮。点击订阅按钮时,会向一个php脚本发出POST
请求,该脚本在正文中有一个json文件,其中包含用户的id
以及带有布尔值的所有事件名称(subscribe)或不属于某人)例如
id: xxxxxx
event1: 1
event2: 0
event3: 0
event4: 1
...
php脚本如下所示:myServer/subscribe.php
。当请求到达时,php文件读取收到的JSON。他在数据库中搜索id
,然后检查事件的名称和发送的布尔值。如果是1,则订阅用户。如果为0则取消订阅用户。如果用户已经订阅并且他再次订阅则没有任何反应。取消订阅也是如此。
最后,当用户进入订阅页面时,会向服务器发出POST
请求,其中正文中的JSON文件包含用户的id
。请求是在一个看起来像myServer/whereSubsribed.php
的php文件上发出的。这个php文件获取id
并在数据库中查找订阅此id
的事件。完成后,它会使用json
文件响应(回显)客户端,该文件包含用户已订阅的所有事件,以便在加载复选框时,用户已订阅的事件似乎可以检查。
上述服务是否休息?我真的很难理解什么是休息,什么不是。 我的理解:
我知道我应该使用POST PUT DELELE GET但是我可以用你看到的POST来做所有事情。那为什么要使用它们?我知道休息是关于名词而不是动词,关于资源而不是行动。我不知道这意味着什么实践。
在我描述的这个特定情况下,有人可以请说明Rest Web服务的外观吗?我怎么可能没有订阅/取消订阅/注册等行动?
我希望通过给我一个例子,我终于可以理解什么是Rest。在这一点上,也许我应该说我不知道什么是SOAP。当我开始开发我的服务时,我就是这样做的,因为这就是我认为正确的方法。然后我了解了休息/肥皂的事情。那么休息是另一种方式,我的服务可以完成,如果是,请花一些时间,并解释我如何?
非常感谢您阅读这篇长篇文章。
**如果你能给我一个答案,请不要给我一个关于这个问题的定义或理论方法。我读过几乎所有需要阅读的内容。我也是一个新的html / php脚本编写者,所以如果你能给我一个与我描述的完全相同的服务的例子,我将不胜感激。如果它是宁静的话会怎样才能理解我的想法。
我看到它的方式,我使用HTTP请求(POST)将一些数据(id,token等)推送到特定的action / php脚本(subscribe,register,whereSubscribed)。
休息应该是准确的相反?通过HTTP(post put delete update)向资源(用户和事件)发送动作。
这是否意味着所有编程都会改变?我不明白怎么可能没有我写的脚本。当你没有PHP脚本时,如何以编程方式进行订阅?!
答案 0 :(得分:1)
正如你所描述的那样,不是它不是REST。在REST中,URL就像指向资源的地址。实际上,URL是名词,HTTP方法是动词。
您所描述的系统包含动词的脚本。例如,subscribe.php
执行某些操作。
RESTful思考,您的资源包括令牌和订阅等内容。如果您想要执行REST,则每个订阅都应该有一个明确且明确的URL。
例如,订阅的网址可能为/path/to/subscriptions/<subscription_id>
,其中<subscription_id>
将替换为相关订阅的特定ID。当客户想要订阅某些内容时,他们会将某些东西放到该URL上。
如果客户想要订阅,但不知道确切的最终位置,他们会发送一些类似/path/to/subscriptions
的通用内容,而HTTP响应会包含一个指向正确方向的Location标头/path/to/subscriptions/<subscription_id>
。
PHP不会立即有助于RESTful编程。 PHP脚本位于特定路径并执行操作(动词)。你必须不遗余力地拥有反映资源名词的漂亮网址。
希望这有帮助!
答案 1 :(得分:1)
在你对上一个答案的评论中,你是完全正确的:
我确信Rest不是关于看起来像名词的漂亮URL名称 或动词。
RESTfull意味着使用HTTP的全部潜力,如下面的帖子中提到并解释的那样:
例如。让我们假设我们有一个用户数据库 由Web服务管理。使用非宁静的方法 可能看起来像这样:
/user_create
/user?id=xxx
/user_edit?id=xxx
/user_delete?id=xxx
/user
/user/xxx
如果您想创建新用户,只需向其发送POST请求即可 包含您要创建的数据的URL。如果你想检索一个 用户向/ user / xxx发送GET请求。如果要更新用户 您只需使用PUT请求发送要更新的字段即可 /用户/ XXX。如果要删除它,请发送DELETE请求 代替。
一个更具体的例子。在RESTful应用程序中,您永远不会 使用GET请求修改数据。这就是PUT,POST和DELETE 对于。但是,大多数Web应用程序都会这样做 因此不是RESTful。
取自:What exactly is RESTful programming?
由于这很难过,RESTfull意味着正确使用以下所有操作: http://en.wikipedia.org/wiki/Http_protocol#Request_methods
这也是回答很多关于REST Apis的问题的好文章:
http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven