簡體   English   中英

處理多個PHP腳本作為后端REST服務的最佳方法?

[英]Best approach for handling multiple PHP scripts as a backend REST service?

我有一個典型的網站設置,其中使用AJAX與PHP腳本進行通信,然后這些PHP腳本將數據讀取和寫入MySQL數據庫。 在我以前的項目中,我需要制作的PHP腳本數量很少,因為我需要讀取或寫入的數據沒有太多變化。 這個站點有些不同,我為每個AJAX調用創建不同的PHP腳本的常規方法導致了大量的PHP腳本。

我決定采用不同的方法,並在同一PHP腳本中對相似的查詢進行分組。 例如,如果我有以下電話:

getGroupById
getAllGroups
createNewGroup

在我以前的方法中,我將有三個單獨的php文件,但是現在我有一個可以完成所有這三個文件。

事實證明,隨着項目的發展,我采取的第二種方法無法維持。 例如,如果我想在同一個腳本中進行多個GET調用,則現在必須從AJAX調用中向腳本傳遞另一個參數,以便PHP腳本知道要執行的查詢。

這兩種方法中哪一種更好? 是否有任何眾所周知的實踐或設計模式來處理?

如果您確實想成為RESTful,請嘗試使PHP文件結構獨立於您希望AJAX請求的方式。

一種常見的設計模式是為您擁有的每個數據實體創建一個表示,然后在該表示上定義CRUD操作。 然后,HTTP方法標頭用作應執行的操作的標識符。

例如,假設您具有以下“部分”數據:

  • 用戶 :您網站的成員
  • :一組成員

如果可能,請在.htaccess中使用類似Apache的mod_rewrite之類的東西來創建一些看起來不錯的URL,如下所示:

接下來,使用AJAX將參數傳遞給GETPUTDELETEPOST請求中的其中一個URL。 通常,AJAX庫允許您定義除GETPOST之外的其他操作。 例如,要刪除jQuery中ID為415的名為Bob的用戶,您可以編寫以下內容:

$.ajax ({
  url: 'http://example.com/api/user'
  method: 'DELETE',
  data: { id: 415 }
  success: {
    // it works!
  }
});

下一步是使用PHP捕獲數據。 我建議為每個“數據”段創建一個單獨的文件,但是當腳本越來越大時,可以更改此文件。 只需調整HTTP服務器的重寫規則即可

api / user.php

// determine what operation was requested
switch ($_SERVER['REQUEST_METHOD'])
{
  case 'POST':
    $data = $_POST;
    // ...
  case 'GET':
    $data = $_GET;
    // e.g. if an ID was provided, fetch one user, else fetch all of the users
    if (isset ($data ['id']))
      fetch_user ($id);
    else
      fetch_users ();
    break;
  case 'PUT':
    $data = parse_str (file_get_contents('php://input'), $put_vars); // see below
    // ...
  case 'DELETE':
    $data = parse_str (file_get_contents('php://input'), $put_vars); // see below
    // ...
  default:
   // 405 = Method Not Allowed
   http_response_code(405); // for PHP >= 5.4.0
   exit;
}

// a whole list of functions to add, retrieve, delete and manipulate users

function fetch_user ($id)
{
  $query = "SELECT * FROM users WHERE id = ...";
  // ...
}

function fetch_users ()
{
  // ...
}

資料來源:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM