3

我正在开发一个客户端-服务器 Web 服务。前端是用构建的,html/javascript/jquery/jqm后端php/mysql.

当客户端启动时,它有一个static id(从不改变)和一个dynamic-token(这意味着它可能会或可能不会改变)。出于这个原因,每次客户端启动时,我们都会将他注册到我们的服务器,我们会向我们的服务器发出POST请求,其中在正文中我们有一个带有id and token. 对一个看起来像这样的 php 脚本发出 post 请求:myserver.com/register.phpphp 脚本接受id and token并查询数据库以查看它们是否存在。如果id不存在,则为creates新记录。如果它存在,它会检查是否token已经改变了它updates

从客户端,用户可以订阅许多事件(比如说 10 个)。事件显示在带有复选框的列表中。用户检查他希望订阅的事件并按下订阅按钮。当点击订阅按钮时,POST会向 php 脚本发出请求,该脚本在正文中有一个 json 文件,其中id包含用户的 json 文件以及带有布尔值(订阅或不订阅)的所有事件名称,例如

id: xxxxxx
event1: 1
event2: 0
event3: 0
event4: 1
...

php 脚本如下所示:myServer/subscribe.php。当请求到达时,php 文件读取接收到的 JSON。他在数据库中搜索id,然后检查事件的名称和发送的布尔值。如果是 1,他订阅了用户。如果为 0,他取消订阅用户。如果用户已经订阅并且他再次订阅,则不会发生任何事情。退订也是一样。

最后,当用户进入订阅页面时,POST会向服务器发出请求,其中包含id用户的 JSON 文件。该请求是在一个看起来像myServer/whereSubsribed.php. 这个 php 文件,获取id并在数据库中查找它id订阅的事件。完成后,它会使用包含json用户已订阅的所有事件的文件向客户端响应(回显),以便在加载复选框时,用户已订阅的事件似乎已被选中。

以上服务是 Rest 吗?我真的很难理解什么是休息,什么不是。我的理解:

我知道我应该使用 POST PUT DELELE GET 但我可以像你看到的那样只用 POST 来做所有事情。那为什么要使用它们呢?我知道 Rest 是关于名词而不是动词,是关于资源而不是动作。我不知道这在实践中意味着什么。

在我描述的这种特定情况下,有人可以描述一下 Rest Web 服务的外观吗?我怎么可能没有订阅/取消订阅/注册之类的操作?

我希望通过给我一个例子,我终于可以理解什么是 Rest。在这一点上,也许我应该说我也不知道什么是 SOAP。当我开始开发我的服务时,我只是这样做了,因为那是我认为正确的方法。然后我了解了 Rest/Soap 的东西。那么休息是另一种可以完成我的服务的方式吗?如果是,请花点时间解释一下如何?

非常感谢您阅读这篇长文。

**如果您愿意给我一个答案,请不要给我关于这个主题的定义或理论方法。我已经阅读了几乎所有需要阅读的内容。我也是一个新的 html/php 脚本编写者,所以如果你能给我一个与我描述的完全相同的服务的例子,我将不胜感激。我认为,如果它是 Restful,它会是什么样子很容易理解。

编辑


在我看来,我使用 HTTP 请求 (POST) 将一些数据(id、token 等)推送到特定的操作/php 脚本(订阅、注册、whereSubscribed)。

休息应该正好相反?通过 HTTP(发布删除更新)向资源(用户事件)发送操作。

这是否意味着所有的编程也会改变?我不明白怎么可能没有我写的脚本。当您没有 php 脚本时,如何以编程方式进行订阅?!

4

2 回答 2

1

在您对上一个答案的评论中,您是完全正确的:

我确信 Rest 不是关于看起来像名词或动词的漂亮 URL 名称。

RESTfull 意味着使用 HTTP 的全部潜力,就像在下面的帖子中通过一个很好的例子提到和解释的那样:

例如。假设我们有一个由 Web 服务管理的用户数据库。使用 non-restful 方法可能看起来像这样:

/user_create
/user?id=xxx
/user_edit?id=xxx
/user_delete?id=xxx

/user 
/user/xxx

如果您想创建一个新用户,您只需向该 URL 发送一个 POST 请求,其中包含您要创建的数据。如果要检索用户,请向 /user/xxx 发送 GET 请求。如果要更新用户,只需使用 PUT 请求将要更新的字段发送到 /user/xxx。如果要删除它,请发送 DELETE 请求。

一个更具体的例子。在 RESTful 应用程序中,您永远不会使用 GET 请求修改数据。这就是 PUT、POST 和 DELETE 的用途。但是,大多数 Web 应用程序一直都在这样做,因此不是 RESTful。

摘自:RESTful 编程到底是什么?

遗憾的是,RESTfull 意味着正确使用以下所有操作: http ://en.wikipedia.org/wiki/Http_protocol#Request_methods

在此处输入图像描述

这也是一篇很好的帖子,它回答了许多关于 REST API 的问题:

http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven

于 2013-06-20T16:49:18.117 回答
1

As you've described it, no it's not REST. In REST, a URL is like an address that points to a resource. In effect, the URLs are the nouns and the HTTP methods are the verbs.

Your system as described has scripts which are verbs. For example, the subscribe.php carries out the action of doing something.

Thinking RESTfully, your resources include things like tokens and subscriptions. If you wanted to do REST, each subscription should have a clear and unambiguous URL.

For example, a subscription's URL might be /path/to/subscriptions/<subscription_id> where <subscription_id> is replaced with the specific ID of the subscription in question. When the client wants to subscribe to something, they'd PUT something to that URL.

If a client wanted to make a subscription, but didn't know the exact final location, they'd POST to something generic like /path/to/subscriptions and the HTTP response would include a Location header pointing the way to the correct /path/to/subscriptions/<subscription_id>.

PHP is not immediately conducive to RESTful programming. A PHP script lives at a particular path and carries out an operation (verb). You have to go out of your way to have pretty URLs that reflect the noun-ness of resources.

Hope this helps!

于 2013-06-20T16:17:56.993 回答