」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > PHP達人 | 使用Slim框架編寫RESTful Web服務

PHP達人 | 使用Slim框架編寫RESTful Web服務

發佈於2025-04-14
瀏覽:844

[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> < o...
    程式設計 發佈於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操作:此實現在啟動下一個操作之前依次等待每個操作的完成。要啟用並發執行,需要進行修改的方法。 第一個解決方案試圖通過獲得每個操作的承諾來解決此問題,然後單獨等待它們: c...
    程式設計 發佈於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數組中的%符號中,您確保將%字符正確替換到查詢中。沒有此修改,PD...
    程式設計 發佈於2025-07-20
  • 為什麼不使用CSS`content'屬性顯示圖像?
    為什麼不使用CSS`content'屬性顯示圖像?
    在Firefox extemers屬性為某些圖像很大,&& && && &&華倍華倍[華氏華倍華氏度]很少見,卻是某些瀏覽屬性很少,尤其是特定於Firefox的某些瀏覽器未能在使用內容屬性引用時未能顯示圖像的情況。這可以在提供的CSS類中看到:。 googlepic { 內容:url(&...
    程式設計 發佈於2025-07-20

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3