3

这个问题是对我之前的问题的扩展:“这个 Web 服务是否 Restfull”,试图更好地理解 Rest Web 服务的概念。我几乎阅读了有关 Rest 的所有内容,但我无法理解某个 Web Service 是否是 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 的原因吗?

编辑


我经常阅读的另一件事是,Rest 使用的是描述资源而不是操作的 url!。再次,虽然我无法理解。对于我的网络服务中的所有内容,我使用发布请求。例如,我想为用户订阅一个事件,我在 url 发出一个发布请求,在my.server.com/subscribe.php这个请求的正文中,我有一个包含id用户和.json 文件的 json 文件event name

当我想注册一个用户时,我在用户的 urlmy.server.com/register.php和正文中发出一个 json请求id

这种情况是休息吗?如果不是,缺少什么?

4

1 回答 1

1

我将尝试按照我的理解解释 REST。

RESTfull Web 服务基于两个因素:

  1. URLS - url 应该基于资源。喜欢:/app/students、/app/students/{id}
  2. 方法 - 该方法定义要对 url 执行的操作。喜欢

    • GET- 获取资源
    • PUT- 插入记录
    • POST- 更新记录
    • DELETE- 删除记录。

有一些方法可以使用 PHP 实现宁静的 url,请参阅此处的答案

于 2013-06-20T11:36:32.650 回答