Restful 是仅适用于 Web 服务还是同时适用于 Web 服务和网页?

2023-12-24

我读了很多 PHP 的 Restful 教程。

(我不想深入探讨为什么我不使用RoR。这是因为团队对PHP更加熟悉)

因为我们计划未来扩展 API,所以我了解到实现 Restful Web 服务非常重要。

我看过诸如此类的教程

http://www.gen-x-design.com/archives/create-a-rest-api-with-php/ http://www.gen-x-design.com/archives/create-a-rest-api-with-php/

显然,restful 是针对网络服务的。

那么对于网页呢?他们也能安静吗?

如果答案是否定的,请不要超出此范围并告诉我。谢谢。

我知道要使 url 看起来像 RESTFUL url,只需使用 mod_rewrite。然而,我非常确定,宁静的架构不仅仅是让网址看起来漂亮。

例如,我在名为 list.php 的网页上有一个项目列表。每个项目旁边都有一个删除链接。例如,list.php?id=1&deletitem

发生的情况是,当有人单击 list.php?id=1 deleteitem 链接时,我当然会返回到同一个 list.php 文件并检查 $_GET 中的参数删除项。

如果检测到,我将根据 $_GET 中的参数 ID 从数据库中删除。

之后我将重定向回 l​​ist.php,无需任何参数。

我想知道,如何让整个流程变得轻松?

我问这个问题是因为在 REST 中,要删除某些内容,您需要使用 HTTP 请求方法(DELETE)。

显然在我的链接中它们都只是简单<a href="list.php?id=1&deleteitem">Delete</a>

请赐教。

我的编程能力不是很强,如果给出的建议能尽可能通俗一些就好了。

谢谢。

EDIT

我有 2 个后续问题。

问题 1) 由于这是一个带有分页的项目列表,如果我想使其成为 RESTful,URL 会是什么样子?

问题 2)由于我将删除链接放在列表中的每一项旁边,我现在明白了,我应该使用

<form method="POST">
<input type=hidden name="_method" value="delete">
<input type="submit" >
</form>

instead.

但是表格应该张贴到哪里?商品网址? /items/{item-id}

但我想在成功删除数据库中的行后返回到显示成功消息的列表页面。

当我用成功消息刷新此列表页面时,我还想避免弹出消息。

如果我发回这个 list.php url,那么它不是 RESTful 是吗?因为下面的答案告诉我,每个项目都是一个需要自己的网址的资源。

请赐教。谢谢。


RESTful 通常在提及 Web 服务时使用,但它也可以很好地应用于网页。简而言之,RESTful 就是处理资源。资源可以是一个人、一本书、一部电影、一个剧院、一张门票或任何你喜欢的东西。

您可以对资源执行四种基本操作。

  • 创建(发布)
  • 读取(获取)
  • 更新(放置)
  • 删除(删除)

大多数网络浏览器不支持PUT and DELETE操作,因此只能使用 POST 操作来发送数据。 Rails 通过传入一个名为的隐藏参数来伪造 PUT 和 DELETE_method框架根据该值拾取并路由它。

另外,你不应该使用GET对于任何破坏性行为。任何改变资源状态的操作都应该使用以下任一方式调用POST, PUT, or DELETE取决于更改(如果需要,可以使用 POST 进行假 PUT/DELETE)。

我建议您检查一下 Rails 中处理 RESTful 路由的方式,只是为了了解一下,如果没有其他的话。尽管上面的四个操作足以以任何可能的方式修改资源,Rails 还引入了其他三种听起来有用的操作类型。

  • 索引(所有项目的列表视图)
  • new(通常是一个表单视图来添加新的 资源)
  • 编辑(通常是表单视图 更新现有资源)

在设计 RESTful 站点时,漂亮的 URL 肯定是需要考虑的,但最大的好处可能是代码质量自动提高。当您只处理资源,并且只有四种可以应用于资源的潜在操作时,事情就会开始自行清理。

Edit 1: 自描述性 URL 是首选,它会让您的生活更轻松,但是创建唯一标识资源并使用 HTTP 动词管理它的神秘 URL 是没有什么问题的。像下面这样的 URL(使用 md5)来唯一标识资源是完全 RESTful 的。

// represents a person "John Doe"
http://example.com/4c2a904bafba06591225113ad17b5cec

// represents the movie "Lord of the Rings: The Two Towers"
http://example.com/1d9198260dec7bda3fb21e232d60fec3

// represents the "Formula One" sport
http://example.com/fs340as?id=23xa12&type=SP012Ts

这就是代表性状态转移。 MD5 哈希就像保持不变的资源的邮寄地址。该表示可以是电影的详细信息(以 html/xml/json/等形式),也可以是电影本身的视频,具体取决于客户端的功能)。

Edit 2: 假设您有一个资源,它是一个集合 -countries世界的。 它可以由 URI 和 HTTP 动词表示,例如:

GET /countries

由于分页是应用程序的属性而不是资源本身,因此您可以提供查询字符串参数来控制它。

GET /countries?page=1

国家也是一种资源,是国家资源的一部分。您可以使用以下 URL 来标识国家/地区:

/countries/<id>

对这个国家的操作可以用这些动词来执行:

GET    /countries/<id>
POST   /countries  -- the new country has no existing representation
PUT    /countries/<id>
DELETE /countries/<id>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Restful 是仅适用于 Web 服务还是同时适用于 Web 服务和网页? 的相关文章

  • 如何从父类中获取子类名

    我试图在不需要子类上的函数的情况下完成此任务 这可能吗 我有一种感觉 但我真的很想确定
  • Laravel $request->file() 返回 null

    尝试在后端使用 Laravel 上传文件时遇到问题 Issue Laravel request gt file 方法返回 null Setup 我使用以下方法构建了一个 AJAX 请求超级代理人 https github com visio
  • 在 RESTful Web 服务中实现注销

    我正在开发一个需要注销服务的移动应用程序 登录服务是通过数据库验证来完成的 现在我陷入了注销状态 退一步 您没有提供有关如何在应用程序中执行身份验证的详细信息 并且很难猜测您在做什么 但是 需要注意的是 在 REST 应用程序中 不能有会话
  • 免费 PHP 登录库 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 用户可以更改 PHP 中 $_SESSION 的值吗?

    这是我的想法 我想知道是否可能 将信息存储在 PHP 的 SESSION 变量中有多安全 在 SESSION 变量中存储变量有两个潜在的 不安全 风险 另一个答案所描述的第一个称为 会话固定 这里的想法是 由于会话 ID 存储在 cooki
  • 在服务器上找不到本地主机或 phpMyAdmin:如何修复?

    我按照安装说明进行操作PHP MySQL and PHPMyAdmin 但是当我尝试访问时http localhost phpmyadmin 我收到此错误 未找到 在此找不到请求的 URL phpmyadmin 服务器 然后我尝试访问loc
  • 图像随机损坏(但刷新后加载)并显示“资源解释为图像但使用 MIME 类型 text/html 传输”

    我目前正在开发一个简单的 php 网站 问题是 我的整个网站中的图像 发生在所有 php 文件中 随机损坏并显示错误资源解释为图像 但以 MIME 类型 text html 传输但是 如果我尝试多次刷新页面 可以再次加载图像并且错误消失 我
  • 使用 PHP/linux 将文件合并为单个 PDF

    我正在研究如何将多个 PDF 合并为一个 PDF 我正在寻找一个图书馆可靠且坚固尽可能 最好有一个库可以保留书签 鬼脚本 http pages cs wisc edu ghost 可以在保存书签的位置进行连接 但我遇到了麻烦 在一种情况下它
  • PDO PHP 连接,致命错误

    我的连接类 firstcode php class DB functions public db function construct try db new PDO mysql localhost dbname xxx charset ut
  • 在哪里可以获得 PHP 5.3+ 的 runkit DLL 扩展?

    这是一个简单的问题 我在哪里可以获得 PHP 5 3 版本的 runkit 扩展 它的手册 http php net manual en book runkit php http php net manual en book runkit
  • 使用值填充的 Symfony2 自定义字段类型

    这是先前问题的后续问题Symfony2 自定义表单类型或扩展 https stackoverflow com questions 24079288 symfony2 custom form type or extension 我正在尝试为订
  • 使用 XPATH(和 PHP)从样式属性中选择背景 url

    我只想从此背景图像样式属性中选择 url 这可以通过 XPATH 实现吗 a href http www test com style background image none test a 我有类似的东西 url xpath gt qu
  • 在 Postman 中连接 ECONNREFUSED

    我试图通过邮递员测试我的 REST API 但收到以下错误 这是我编写的第一个 REST API 我对邮差很陌生 所以不确定我做错了什么 下面是我尝试使用此 URL 在邮递员中调用的代码 我在 URL 中传递两个日期参数 https loc
  • 如何在codeigniter中将上传图片比例限制为16:9?

    这是我用来上传图像的代码 this gt load gt library upload ext pathinfo file name PATHINFO EXTENSION img name now ext imgConfig upload
  • PHP 编码风格回归;在开关/外壳中

    我们正在尝试为我们的团队实施新的编码风格指南 当未找到 break 时 php codeniffer 会在 switch case 语句上打印警告 如下所示 switch foo case 1 return 1 case 2 return
  • 从 Laravel 4 输入生成新数组

    我使用 Input all 从动态生成的表单中获取一些输入 我使用 jQuery 来允许用户添加字段 字段名称为 first names last names 和 emails input 变量现在看起来像这样 array size 4 t
  • PHP 接口有属性吗?

    PHP 中的接口有属性 还是只有方法 您可以在 DocBlock 中为接口声明属性 然后 IDE 将提示接口的这些属性 PhpStorm 会这样做 但这不会强制在实现类中实际实现这些字段 例如 property string passwor
  • 字符串相似度的算法(比Levenshtein和similar_text更好)? php, Js

    在哪里可以找到比 levenshtein 和 phpimilar text 方法更准确地评估错误字符的拼写的算法 Example similar text jonas xxjon similar echo similar returns 6
  • PHP session_regenerate_id 和黑莓浏览器

    问候 我正在开发一个登录系统 并陷入了黑莓浏览器身份验证的困境 他们似乎对 PHP 的 session regenerate id 有问题 有人可以建议替代方案吗 以下是身份验证和登录脚本 UPDATE看来会话一般都不起作用 拿出 sess
  • 如何从日期中查找该月的最后一天?

    如何在 PHP 中获取该月的最后一天 Given a date 2009 11 23 我要2009 11 30 并给出 a date 2009 12 23 我要2009年12月31日 t返回给定日期所在月份的天数 请参阅的文档date ht

随机推荐

  • 将方法转换为静态方法时的内存使用情况

    我开始使用 Resharper 它指示何时使用一种方法could设为静态 将数百个方法转换为静态方法会在很长一段时间内增加内存占用吗 否 更改为静态方法对内存没有影响 第一次引用类型 无论是静态还是非静态 时 都会初始化所有静态成员并运行静
  • 为 Caffe 生成 LMDB

    我正在尝试使用 caffe 我正在使用 python 包装器 构建用于显着性分析的深度学习模型 但我无法理解如何为此目的生成 lmdb 数据结构 我已经浏览了 Imagenet 和 mnist 示例 我明白我应该以以下格式生成标签 my t
  • 如何添加日期时间字段和时间字段

    我必须添加time对现有的价值datetime在 SQL Server 2012 中使用 T SQL 的值 我在想DATEADD http msdn microsoft com en us library ms186819 aspx功能它可
  • 如何在node.js上运行.php脚本

    我使用 wamp 服务器和 node js 来运行我的应用程序 server js 但是当我想执行 php 脚本时 我总是收到错误 POST http localhost 8080 login php 404 Not Found 服务器 j
  • 从 VBA 定义的宏创建 PowerPoint 加载项

    因此 我在 PowerPoint 演示文稿中创建了一个宏 并且希望其他人可以轻松使用该宏 根据我收集的信息 最好的方法是创建一个Add in 我看到几篇文章指出要执行以下操作 但我仍然遇到问题 打开新的 PowerPoint 演示文稿 使用
  • 如何从一个项目创建多个apk?

    我有一个 android 项目 我需要在其中创建多个 apk 每个 apk 之间的唯一区别是包名称 例如 com my package name 和应用程序字符串名称 因此我可以在一台设备上安装该应用程序的多个实例 有更好的方法吗 我考虑过
  • PL/SQL:有什么技巧可以避免对象的克隆吗?

    如果我们将一个对象变量分配给 pl sql 中的其他对象变量 则该对象将被克隆 因为 pl sql 不支持引用 例如 以下代码将打印两个不同的句子 create or replace type cla as object class wou
  • 在 Firebase Storage Swift 中使用图像引用数据库中的 Firebase 用户

    通常我可以在网上找到这个问题的答案 但由于它太新了 我一直遇到麻烦 当我让用户登录应用并为其个人资料选择 4 5 张图片时 如何将这些图像存储在 Firebase 存储中 并在 Firebase 数据库中将这些图像引用给该用户 Thanks
  • 如何在php中制作活动导航栏?

    您好 我正在尝试使我的导航栏在 php 中处于活动状态 以便用户可以知道他们所在的页面 我是php新手 对它了解不多 那么如何在此代码中添加 class active 来创建活动导航栏并在同一 index php 页面中显示所有页面 a h
  • ValueError:尺寸不匹配

    I use SciPy http scipy org and scikit学习 http scikit learn org stable 训练并应用多项式朴素贝叶斯分类器进行二进制文本分类 准确地说 我使用该模块sklearn featur
  • 序列化复杂类型 System.Nullable

    我想序列化 DateTime 以便当 DateTime 为 null 时我无法获取标签本身 我还设置了为上面指定的 bool 值 但我的问题是 DateTime 是值类型 它永远不会为 null 因此指定的 bool 值将始终为 true
  • Chrome 中的 Javascript 调试 - 对象名称?

    不知道 下图中圈出的东西 叫什么 使我的问题很难找到答案 下图中我圈出的东西叫什么名字 实际上是什么 myObject myFunction 是无关紧要的 我希望能够将其写到控制台 我尝试过以下方法 console log sp outpu
  • Spring Boot 2 未序列化 LocalDateTime

    我最近尝试使用 spring boot 2 实现一个微服务 现在 每当我尝试返回一个包含java time LocalDateTime从我的 REST 服务中 LocalDateTime 被序列化为整数数组 就像这样 id 5bf1425f
  • JDBC SQL 数据库被锁定?

    我正在编写一个使用本地 SQL 数据库来存储数据的程序 我正在使用这里找到的驱动程序 https bitbucket org xerial sqlite jdbc https bitbucket org xerial sqlite jdbc
  • 在 Web 项目中使用 SOLR 的最佳方法是什么?

    好吧 我对 SOLR 和 Lucene 完全陌生 但已经让 Solr 在 Tomcat 6 x 下开箱即用地运行 并且刚刚浏览了一些基本的 Wiki 条目 我有几个问题 也需要一些建议 Solr 可以索引文件 XML CSV 中的数据 也可
  • Apple Watch 应用程序可以与 Apple TV 交互吗?

    我正在寻找解决方案 甚至是关于在之间共享数据 发送信号等的可能性的线索Apple Watch应用程序和Apple TV app 就我而言 我有一个应用程序可以使用以下方法进行一些计算Apple Watch我希望这些计算能够对Apple TV
  • 如何让乘客配置重新启动应用程序正常工作?

    Ubuntu 14 04 上的 Rails 4 1 带有 rbenv 和 ruby 2 2 1 将 capistrano 与 capistrano passenger gem 一起使用 但最后重新启动失败 INFO 8213c63a Run
  • 在Python中向信号添加噪声

    我想向我在 Python 中模拟的 100 个 bin 信号添加一些随机噪声 使其更加真实 在基本层面上 我的第一个想法是逐个容器 生成某个范围内的随机数 然后从信号中添加或减去该数字 我希望 因为这是Python 可能有一种更智能的方法通
  • XInitThreads() 的缺点是什么?

    I know XInitThreads 将允许我从主线程以外的线程调用 X 服务器 如果我想使 Xlib 中的并发线程支持是必要的使用 Qt 从辅助线程调用 OpenGL http doc qt digia com qq qq06 glim
  • Restful 是仅适用于 Web 服务还是同时适用于 Web 服务和网页?

    我读了很多 PHP 的 Restful 教程 我不想深入探讨为什么我不使用RoR 这是因为团队对PHP更加熟悉 因为我们计划未来扩展 API 所以我了解到实现 Restful Web 服务非常重要 我看过诸如此类的教程 http www g