这个问题是我之前问题的延伸:"Is this web service Restfull"试图更好地理解 Rest Web 服务的概念。 我几乎阅读了所有关于 Rest 的内容,但我无法理解某个 Web 服务是否是 Rest,或者为什么不是。在我看来,一切都是和不是休息取决于观点......
我在一篇非常有趣的文章中读到了一些东西,它可能最终让我明白了什么是休息。我读到 Rest 不使用物理 url,而是使用逻辑 url。
我记得有一次我在开发一个 iOS 应用程序,我们必须在其中注册/订阅用户等,我被告知向我们的服务器发出一个特定的 Post HTTP 请求到一个如下所示的 URL:www.myServer/设备/设备/注册
。在此请求的正文中,我拥有服务器所需的所有 json 格式信息。那时我的服务器是一个黑盒子,所以我什至不关心这个链接是什么意思或者它是如何生成的。但我知道这是一个网络 Rest 服务。
这个月我开始开发一个移动混合应用程序,我开始使用 native 代码 + jquery mobile 开发前端,使用 php + mysql 开发后端。我在这里或多或少有相同的场景,用户需要订阅或不订阅事件。当他按下按钮订阅特定事件时,我向特定的 php 脚本发出带有 ajax 调用和正文中的 json 文件的 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!。再次,虽然我不明白。对于我的 Web 服务中的所有内容,我都使用 Post Request。例如,我想为一个用户订阅一个事件,我在 url my.server.com/subscribe.php
发出一个发布请求,在这个请求的正文中,我有一个 json 文件用户的 id
和 事件名称
。
当我想注册一个用户时,我在 url my.server.com/register.php
发出一个 post 请求,并在正文中使用 id
发出一个 json用户的。
这个场景是 Rest 吗?如果不是,还缺少什么?
最佳答案
我会尽量按照我的理解来解释 REST。
RESTfull 网络服务基于两个因素:
- URLS - URLs 应该基于资源。喜欢:/app/students,/app/students/{id}
方法 - 该方法定义了要在 url 上完成的操作。喜欢
GET
- 获取资源PUT
- 插入记录POST
- 更新记录DELETE
- 删除记录。
有一些方法可以使用 PHP 实现 restful url 查看答案 here
关于php - 逻辑和物理 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17209809/