这个问题是我之前问题的延伸:“此网络服务是否安静” https://webmasters.stackexchange.com/questions/49832/what-qualifies-as-a-rest-web-service尝试更好地理解 Rest Web 服务的概念。
我几乎阅读了有关 Rest 的所有内容,但我无法理解某个 Web 服务是否是 Rest,或者为什么不是。在我看来,一切都是或不是休息取决于观点......
我读到一篇非常有趣的文章,它可能最终让我明白什么是休息。我读到 Rest 不使用物理 URL,而是使用逻辑 URL。
我记得有一次我正在开发一个 iOS 应用程序,我们必须注册/订阅用户等,我被告知要向我们的服务器发出某个 Post HTTP 请求,其 URL 如下所示:www.myServer/devices/device/register
。在此请求的正文中,我拥有服务器所需的 json 格式的所有信息。那时我的服务器是一个黑匣子,所以我什至不关心这个链接的含义或它是如何生成的。但我知道这是一个网络休息服务。
这个月我开始开发一个移动混合应用程序,我开始用本地代码+ jquery mobile 开发前端,用 php + mysql 开发后端。我这里有或多或少相同的场景,用户是否需要订阅某个事件。当他按下按钮订阅特定事件时,我使用 ajax 调用和正文中的 json 文件向特定的 php 脚本发出 http post 请求,并且该脚本相应地在数据库中写入/更新/删除。
该调用看起来像这样:
$.ajax({
type: "POST",
url: "http://192.168.4.113/Server_CityInfo/subscribe.php",
data: data,
contentType: "application/json; charset=utf-8",
//dataType: "json",
success: function(response) {
$.mobile.changePage( "dialog.html", { role: "dialog" } );
},
error: function(xhr, status, message) { alert("Status: " + status + "\nMessage: " + message); }
});
正如您所看到的,我确实使用了物理 url 来指向我的 php 脚本来执行该操作。甚至用户所在的html页面也是一个物理页面!是类似 myUrl.com/eventX 的页面。
这是否意味着我正在构建的这个 Web 服务不是 Rest 服务?
去年他们如何将我指向逻辑 URL 而我只能指向物理 php 脚本?我知道他们的服务器是 java 的,也许这就是为什么 url 看起来不真实?
最后,假设我有 100 个不同的事件可供用户订阅。当然我不会制作 100 个静态 html 页面。但我会制作 1 个动态生成的 html 页面。但到该页面的链接仍然是物理的,就像mySite.com/event.html
。我知道使 url 看起来合乎逻辑的唯一方法是当您在文件夹中有一个 index.html 文件并且指向该文件夹时,使 url 看起来像myWebsite.com/myFolder
.
所以这里的问题是,如何构建一个逻辑 url,这就是使服务 Restfull 的原因吗?
EDIT
我读了很多的另一件事是 Rest 使用描述资源而不是操作的 url!虽然我再次无法理解。对于我的网络服务中的所有内容,我使用发布请求。例如,我想要让用户订阅一个事件,我在 url 发出一个发布请求my.server.com/subscribe.php
在此请求的正文中,我有一个 json 文件,其中包含id
用户和event name
.
当我想注册一个用户时,我在 url 上发出一个 post 请求my.server.com/register.php
和正文中的 jsonid
用户的。
这种情况是休息吗?如果不是,还缺少什么吗?