”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > PHP达人 | 使用Slim框架编写RESTful Web服务

PHP达人 | 使用Slim框架编写RESTful Web服务

发布于2025-04-14
浏览:286

[2

此站点点系列探索了REST原理。 本文展示了使用Slim(由Sinatra(Ruby))启发的PHP微型框架的Slim构建一个安息的Web服务。 Slim的轻质性质,具有核心组件,例如路由,请求/响应处理和最少的视图支持,使其非常适合简单的REST API。 [2 PHP Master | Writing a RESTful Web Service with Slim

Slim是PHP Micro-FrameWork,非常适合直接的Restful服务,支持PHP 5.2和Proceding和(5.3)功能编程样式。

将uris映射到特定HTTP方法的回调函数。 Slim有效地处理同一URI的多种方法。

图书馆管理应用程序示例通过Web Service Call显示列表,添加,删除和更新账面详细信息。 Notorm,轻型PHP数据库库,处理数据库交互。

[2 从下载Slim开始。 此示例使用5.3样式。创建

index.php
  • get(“/”,function(){ echo“
  • ”; }); $ app-> run(); ?>
  • 在您的浏览器中访问
  • )。 设置环境(开发/生产),模板指定模板目录。 自定义视图处理程序可以替换默认 slim_view 。例子:
  • “开发”, “ templates.path” =>“ ./templates” ); ?>

路线创建至关重要。 路由将URI映射到基于HTTP方法的回调函数。 Slim优先考虑第一个匹配路线;无与伦比的请求导致404错误。 定义路由后,调用 run()

启动应用程序。

让我们创建一个库管理服务。 notorm简化了数据库交互(需要一个PDO实例)。

get("/", function () {
    echo "

Hello Slim World

"; }); $app->run(); ?>

handles get requests。 使用允许在匿名函数中访问外部变量。响应标头设置为 application/json ,并且书籍数据被编码为json。 [2 通过ID检索一本书: get(“/book/:id”,功能($ id)使用($ app,$ db){ $ app-> wenders() - >标题(“ content-type”,“ application/json”); $ book = $ db-> books() - >其中(“ id”,$ id); 如果($ data = $ book-> fetch()){ echo json_encode(array(array)( “ id” => $ data [“ id”], “ title” => $ data [“ title”], “作者” => $ data [“作者”], “摘要” => $ data [“摘要”] ); } 别的 { echo json_encode(array(array)( “状态” => false, “消息” =>“书ID $ ID不存在” ); } }); // ...(其余代码)... 路由参数:id 传递给回调函数。 可选参数使用/book(/:id)。 对于无显式回调参数的可选参数,请使用 func_get_args()

。 [2 [2
 "development",
    "TEMPLATES.PATH" => "./templates"
));
?>
_方法

delete(“/book/:id”,函数($ id)使用($ app,$ db){ $ app-> wenders() - >标题(“ content-type”,“ application/json”); $ book = $ db-> books() - >其中(“ id”,$ id); 如果($ book-> fetch()){ $ result = $ book-> delete(); echo json_encode(array(array)( “状态” => true, “消息” =>“成功删除的书” ); } 别的 { echo json_encode(array(array)( “状态” => false, “消息” =>“书ID $ ID不存在” ); } }); // ...(其余代码)...

方法删除数据库记录。

map()方法在单个路由上处理多个http方法(此处未显示)。

结论:

本文演示了使用Slim构建基本的RESTFUL Web服务。  进一步的开发应包括可靠的错误处理和输入验证。  源代码(此处不包括)可以在GitHub上找到(原始文本中未提供链接)。  原始文本的常见问题解答部分被省略,因为它可以通过Slim的文档提供基本信息。
最新教程 更多>
  • 如何从PHP中的数组中提取随机元素?
    如何从PHP中的数组中提取随机元素?
    从阵列中的随机选择,可以轻松从数组中获取随机项目。考虑以下数组:; 从此数组中检索一个随机项目,利用array_rand( array_rand()函数从数组返回一个随机键。通过将$项目数组索引使用此键,我们可以从数组中访问一个随机元素。这种方法为选择随机项目提供了一种直接且可靠的方法。
    编程 发布于2025-07-20
  • 如何在Chrome中居中选择框文本?
    如何在Chrome中居中选择框文本?
    选择框的文本对齐:局部chrome-inly-ly-ly-lyly solument 您可能希望将文本中心集中在选择框中,以获取优化的原因或提高可访问性。但是,在CSS中的选择元素中手动添加一个文本 - 对属性可能无法正常工作。初始尝试 state)</option> < op...
    编程 发布于2025-07-20
  • 如何干净地删除匿名JavaScript事件处理程序?
    如何干净地删除匿名JavaScript事件处理程序?
    删除匿名事件侦听器将匿名事件侦听器添加到元素中会提供灵活性和简单性,但是当需要删除它们时,可以构成挑战,而无需替换元素本身就可以替换一个问题。 element? element.addeventlistener(event,function(){/在这里工作/},false); 要解决此问题,请考...
    编程 发布于2025-07-20
  • CSS可以根据任何属性值来定位HTML元素吗?
    CSS可以根据任何属性值来定位HTML元素吗?
    靶向html元素,在CSS 中使用任何属性值,在CSS中,可以基于特定属性(如下所示)基于特定属性的基于特定属性的emants目标元素: 字体家庭:康斯拉斯(Consolas); } 但是,出现一个常见的问题:元素可以根据任何属性值而定位吗?本文探讨了此主题。的目标元素有任何任何属性值,属...
    编程 发布于2025-07-20
  • 如何在Java的全屏独家模式下处理用户输入?
    如何在Java的全屏独家模式下处理用户输入?
    Handling User Input in Full Screen Exclusive Mode in JavaIntroductionWhen running a Java application in full screen exclusive mode, the usual event ha...
    编程 发布于2025-07-20
  • 哪种方法更有效地用于点 - 填点检测:射线跟踪或matplotlib \的路径contains_points?
    哪种方法更有效地用于点 - 填点检测:射线跟踪或matplotlib \的路径contains_points?
    在Python Matplotlib's path.contains_points FunctionMatplotlib's path.contains_points function employs a path object to represent the polygon.它...
    编程 发布于2025-07-20
  • Java中如何使用观察者模式实现自定义事件?
    Java中如何使用观察者模式实现自定义事件?
    在Java 中创建自定义事件的自定义事件在许多编程场景中都是无关紧要的,使组件能够基于特定的触发器相互通信。本文旨在解决以下内容:问题语句我们如何在Java中实现自定义事件以促进基于特定事件的对象之间的交互,定义了管理订阅者的类界面。以下代码片段演示了如何使用观察者模式创建自定义事件: args)...
    编程 发布于2025-07-20
  • 如何将PANDAS DataFrame列转换为DateTime格式并按日期过滤?
    如何将PANDAS DataFrame列转换为DateTime格式并按日期过滤?
    Transform Pandas DataFrame Column to DateTime FormatScenario:Data within a Pandas DataFrame often exists in various formats, including strings.使用时间数据时...
    编程 发布于2025-07-20
  • 在Pandas中如何将年份和季度列合并为一个周期列?
    在Pandas中如何将年份和季度列合并为一个周期列?
    pandas data frame thing commans date lay neal and pree pree'和pree pree pree”,季度 2000 q2 这个目标是通过组合“年度”和“季度”列来创建一个新列,以获取以下结果: [python中的concate...
    编程 发布于2025-07-20
  • 为什么Microsoft Visual C ++无法正确实现两台模板的实例?
    为什么Microsoft Visual C ++无法正确实现两台模板的实例?
    在Microsoft Visual C 中,Microsoft consions用户strate strate strate strate strate strate strate strate strate strate strate strate strate strate strate st...
    编程 发布于2025-07-20
  • 如何修复\“常规错误:2006 MySQL Server在插入数据时已经消失\”?
    如何修复\“常规错误:2006 MySQL Server在插入数据时已经消失\”?
    How to Resolve "General error: 2006 MySQL server has gone away" While Inserting RecordsIntroduction:Inserting data into a MySQL database can...
    编程 发布于2025-07-20
  • 在JavaScript中如何并发运行异步操作并正确处理错误?
    在JavaScript中如何并发运行异步操作并正确处理错误?
    同意操作execution 在执行asynchronous操作时,相关的代码段落会遇到一个问题,当执行asynchronous操作:此实现在启动下一个操作之前依次等待每个操作的完成。要启用并发执行,需要进行修改的方法。 第一个解决方案试图通过获得每个操作的承诺来解决此问题,然后单独等待它们: co...
    编程 发布于2025-07-20
  • 如何使用Depimal.parse()中的指数表示法中的数字?
    如何使用Depimal.parse()中的指数表示法中的数字?
    在尝试使用Decimal.parse(“ 1.2345e-02”中的指数符号表示法表示的字符串时,您可能会遇到错误。这是因为默认解析方法无法识别指数符号。 成功解析这样的字符串,您需要明确指定它代表浮点数。您可以使用numbersTyles.Float样式进行此操作,如下所示:[&& && && ...
    编程 发布于2025-07-20
  • 如何正确使用与PDO参数的查询一样?
    如何正确使用与PDO参数的查询一样?
    在pdo 中使用类似QUERIES在PDO中的Queries时,您可能会遇到类似疑问中描述的问题:此查询也可能不会返回结果,即使$ var1和$ var2包含有效的搜索词。错误在于不正确包含%符号。通过将变量包含在$ params数组中的%符号中,您确保将%字符正确替换到查询中。没有此修改,PDO...
    编程 发布于2025-07-20
  • 为什么不使用CSS`content'属性显示图像?
    为什么不使用CSS`content'属性显示图像?
    在Firefox extemers属性为某些图像很大,&& && && &&华倍华倍[华氏华倍华氏度]很少见,却是某些浏览属性很少,尤其是特定于Firefox的某些浏览器未能在使用内容属性引用时未能显示图像的情况。这可以在提供的CSS类中看到:。googlepic { 内容:url(&#...
    编程 发布于2025-07-20

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3