国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 后端開發(fā) php教程 如何使用純 PHP 創(chuàng)建 API?

如何使用純 PHP 創(chuàng)建 API?

Nov 04, 2024 am 06:11 AM

Como criar API com PHP Puro?

在這個項目中,我們將在任何框架中僅使用 PHP 創(chuàng)建一個簡單的 API。我們所需要的只是:

  • PHP - 必備
  • 作曲家 - 必備
  • 編輯器/IDE,如 VScode 或 PHPStorm
  • Docker - 首選但不是必需
  • 郵遞員 - 首選,但不是必需

讓我們首先為數(shù)據(jù)庫配置定義 docker-compose.yml 文件。如果您不想使用 Docker 在容器中創(chuàng)建數(shù)據(jù)庫,解決方案是在您的計算機上安裝數(shù)據(jù)庫。在本教程中,我們將使用 MySQL。

設置

創(chuàng)建應用程序所在的文件夾后,我們首先配置 docker-compose.yaml:

services:
  mysql:
    image: mysql:9.1.0
    ports:
      - '3306:3306'
    environment:
      MYSQL_ROOT_PASSWORD: useroot
      MYSQL_USER: api_user
      MYSQL_PASSWORD: api_password
      MYSQL_DATABASE: api_example

讓我們將此文件分成幾部分進行解釋:

services:
  mysql:

在此文件中,我們定義將使用的服務。
我將此服務命名為 mysql。 注意,該服務的名稱將用于作為主機連接到數(shù)據(jù)庫

image: mysql:9.1.0

接下來我定義將使用哪個圖像來創(chuàng)建我們的數(shù)據(jù)庫,對于這個項目,我使用 mysql9.1.0 版本。
您可以在 Docker Hub 上找到此版本和其他版本。

ports:
      - '3306:3306'

端口正在設置為3306。這是默認的mysql端口!

你可以注意到端口就像3306:3306,這個:意味著我們想要在本地機器上監(jiān)聽這個端口,而不僅僅是在docker容器上,這樣我們就可以直接在我們的機器上訪問它。

environment:
      MYSQL_ROOT_PASSWORD: useroot
      MYSQL_USER: api_user
      MYSQL_PASSWORD: api_password
      MYSQL_DATABASE: api_example

作為一個環(huán)境,我們必須定義 mysql 服務的憑據(jù)。
因此,我們使用環(huán)境變量定義用戶、密碼和數(shù)據(jù)庫名稱:

MYSQL_USER: api_user // <--- Este é nosso usuário
MYSQL_PASSWORD: api_password // <--- Este é nosso password
MYSQL_DATABASE: api_example // <--- Este é nosso banco de dados
MYSQL_ROOT_PASSWORD: useroot // <--- Está é a senha para o usuário root

要啟動我們的容器,只需進入 docker-compose.yaml 文件所在的文件夾并在終端中輸入以下命令:

docker compose up -d

這將初始化我們?nèi)萜髦械?mysql 服務。
如果你想在終端內(nèi)訪問mysql,可以使用這個命令:

docker exec -it <nome do container> bash

輸入此命令并按 Enter 鍵后,您將進入運行 mysql 鏡像的容器。

容器名稱由文件夾名-主機名-數(shù)字組成
在這種情況下,如果我們的應用程序是在“create-api-php”目錄中創(chuàng)建的,則容器的名稱將為:create-api-php-mysql-1。

我們還將創(chuàng)建一個composer.json文件,該文件將作為安裝項目中使用的外部庫的基礎。在這個項目中我們將只使用Dotenv。

services:
  mysql:
    image: mysql:9.1.0
    ports:
      - '3306:3306'
    environment:
      MYSQL_ROOT_PASSWORD: useroot
      MYSQL_USER: api_user
      MYSQL_PASSWORD: api_password
      MYSQL_DATABASE: api_example

在這一行中,我們添加了 php 中最常用的 dotenv 庫。
您可以在以下位置找到此庫的存儲庫:Github Vlucas Repository

services:
  mysql:

在下面的行中,我們基本上是說我們將在 PSR-4 的默認配置中使用自動加載。目前最常用的 PSR 是 PSR-12 和 PSR-4,其中 12 是迄今為止最常用的。但現(xiàn)在我們將繼續(xù)使用 PSR-4。

image: mysql:9.1.0

創(chuàng)建這兩個文件后,我們可以發(fā)出命令

ports:
      - '3306:3306'

它將安裝 Dotenv 庫并配置所需 PSR 的設置。
執(zhí)行此命令后,將在我們的環(huán)境中創(chuàng)建composer.lock.

文件

對于來自 JavaScript 世界的人來說,這些文件可以與 package.jsonpackage-lock.json.

進行比較

您還會看到一個名為供應商的文件夾已添加到您的目錄中,它包含我們的 Dotenv 庫以及一個非常重要的文件:autoload.php。
我們不需要觸摸或更改此文件中的任何內(nèi)容,因為它將負責在我們的其他文件之間處理 Dotenv 信息。

我們還將創(chuàng)建一個名為 bootstrap.php 的文件,該文件負責初始化我們的應用程序并連接一些重要參數(shù),以便一切按預期工作:

environment:
      MYSQL_ROOT_PASSWORD: useroot
      MYSQL_USER: api_user
      MYSQL_PASSWORD: api_password
      MYSQL_DATABASE: api_example

然后我們可以創(chuàng)建 .env 文件來添加負責連接到我們的 mysql 數(shù)據(jù)庫的環(huán)境變量。
然后我們添加:

MYSQL_USER: api_user // <--- Este é nosso usuário

我們還將創(chuàng)建一個 .env.example 文件,其中將保存此信息的副本,以防有人想要克隆我們的存儲庫,甚至將來如果我們想繼續(xù)我們的項目,這樣我們就可以了解我們需要定義什么以及不需要什么的必要信息。

MYSQL_PASSWORD: api_password // <--- Este é nosso password

我們之所以要創(chuàng)建這兩個文件,一個包含所有信息,另一個僅包含部分信息,是因為 .env 文件不應該上傳到存儲庫,因為它包含機密信息。假設將來我們要使用第三方 API,需要添加 token 進行訪問,然后我們會將這些信息存儲在 .env 文件中。

為了防止 .env 文件上傳到我們的存儲庫,我們將創(chuàng)建一個名為 .gitignore 的文件并添加以下信息:

MYSQL_DATABASE: api_example // <--- Este é nosso banco de dados

這樣我們就定義了 .env 文件和供應商文件夾的全部內(nèi)容將不會被提交。

至此,我們已經(jīng)完成了項目配置,可以繼續(xù)編碼了。

編纂

我們將創(chuàng)建以下目錄 src/System 并在系統(tǒng)內(nèi)創(chuàng)建文件 DatabaseConnector.php

services:
  mysql:
    image: mysql:9.1.0
    ports:
      - '3306:3306'
    environment:
      MYSQL_ROOT_PASSWORD: useroot
      MYSQL_USER: api_user
      MYSQL_PASSWORD: api_password
      MYSQL_DATABASE: api_example

這里我們?yōu)榇宋募x一個命名空間,以便我們將來可以在其他文件中使用它。

services:
  mysql:

我們將創(chuàng)建與文件同名的類,并創(chuàng)建一個名為 $dbConnection 并傳遞 null 值的私有變量。
該變量將負責此類的新實例并將我們與數(shù)據(jù)庫連接起來。
稍后當我們實現(xiàn) try-catch.
時我們會看到更多

image: mysql:9.1.0

在構(gòu)造函數(shù)中,我們將創(chuàng)建以下變量并使用 Dotenv 檢查從 .env 文件捕獲的值。

ports:
      - '3306:3306'

仍在構(gòu)造函數(shù)內(nèi),我們將執(zhí)行 try-catch 來驗證我們要執(zhí)行的操作:

environment:
      MYSQL_ROOT_PASSWORD: useroot
      MYSQL_USER: api_user
      MYSQL_PASSWORD: api_password
      MYSQL_DATABASE: api_example

在此嘗試中,我們嘗試創(chuàng)建類的新實例并將其傳遞到 $dbConnection 變量中。我們?yōu)榇耸褂?PDO 模塊,它接收參數(shù)

  • DSN - 數(shù)據(jù)源名稱或 URI
  • - mysql:作為我們正在使用的服務/銀行。
  • - 主機=$主機; 我們的主人
  • - 端口=$端口; 我們的門
  • - 字符集=utf8mb4; 數(shù)據(jù)庫的utf8字符集的定義
  • - dbname=$db 我們數(shù)據(jù)庫的名稱
  • USER - 登錄數(shù)據(jù)庫的用戶
  • PASS - 登錄數(shù)據(jù)庫的密碼

錯誤案例:

MYSQL_USER: api_user // <--- Este é nosso usuário

我們將觸發(fā) PDO 異常并返回錯誤消息。
顯然,這只是我們應該如何在開發(fā)環(huán)境中呈現(xiàn)錯誤的示例。對于生產(chǎn)環(huán)境,最好呈現(xiàn)更簡潔的錯誤,幫助我們更清楚地理解問題。

在構(gòu)造函數(shù)之外但在我們的類內(nèi)部,我們將創(chuàng)建以下函數(shù):

MYSQL_PASSWORD: api_password // <--- Este é nosso password

負責調(diào)用包含連接實例的變量。

還記得我們的 bootstrap.php 文件嗎?讓我們添加以下幾行代碼:

MYSQL_DATABASE: api_example // <--- Este é nosso banco de dados

看起來像這樣:

MYSQL_ROOT_PASSWORD: useroot // <--- Está é a senha para o usuário root

在文件夾src中,我們將創(chuàng)建另一個名為Database的目錄,并在其中創(chuàng)建文件database_seed.php。
這個文件將負責第一次填充我們的數(shù)據(jù)庫,所以如果我們想與某人共享這個項目,它不會以空數(shù)據(jù)庫結(jié)束。

在此文件中,我們將添加以下代碼:

services:
  mysql:
    image: mysql:9.1.0
    ports:
      - '3306:3306'
    environment:
      MYSQL_ROOT_PASSWORD: useroot
      MYSQL_USER: api_user
      MYSQL_PASSWORD: api_password
      MYSQL_DATABASE: api_example

我們導入 require 'bootstrap.php';因為在我們的引導文件中,我們已經(jīng)導入了負責實例化數(shù)據(jù)庫的變量。

services:
  mysql:

我們創(chuàng)建一個名為 $statement 的變量,其值為 Heredoc

image: mysql:9.1.0

在此Heredoc中,我們將添加一些查詢

ports:
      - '3306:3306'

這里我選擇刪除表刪除整個基礎,然后開始一個新的,但是如果你愿意,你可以刪除這行代碼。

下面的代碼行指定該表將用于執(zhí)行事務,并且表之間將建立連接。如果你想了解更多關于這個mysql聲明:innoDb文檔

environment:
      MYSQL_ROOT_PASSWORD: useroot
      MYSQL_USER: api_user
      MYSQL_PASSWORD: api_password
      MYSQL_DATABASE: api_example

在同一個Heredoc中,我們將添加另一個查詢

MYSQL_USER: api_user // <--- Este é nosso usuário

這里我們將一些數(shù)據(jù)插入到 person 表中。

我們在文件末尾創(chuàng)建一個 try-catch,嘗試初始化查詢,如果出現(xiàn)錯誤,我們會返回一條錯誤消息,就像我們在上面代碼中的數(shù)據(jù)處理中所做的那樣.

MYSQL_PASSWORD: api_password // <--- Este é nosso password

src 中,我們將創(chuàng)建另一個名為 TableGateways 的目錄,并在其中創(chuàng)建文件:PersonGateway.php。

MYSQL_DATABASE: api_example // <--- Este é nosso banco de dados

此文件夾中的文件將負責與我們的數(shù)據(jù)庫交互,幾乎就像存儲庫。

在我們的 PersonGateway 類中,我們將添加以下構(gòu)造函數(shù):

MYSQL_ROOT_PASSWORD: useroot // <--- Está é a senha para o usuário root

我們將添加這個構(gòu)造函數(shù),因為我們的類將在其他文件中被調(diào)用,以便我們可以觸發(fā)我們類的一些方法。

請參閱以下方法:

負責列出表中所有用戶的方法

docker compose up -d

負責列出表中單個用戶的方法

docker exec -it <nome do container> bash

將用戶插入到我們的表中的可靠方法

{
  "require": {
      "vlucas/phpdotenv": "^2.4"
  },
  "autoload": {
      "psr-4": {
          "Src\": "src/"
      }
  }
}

負責更新表中用戶信息的方法

"require": {
      "vlucas/phpdotenv": "^2.4"
},

負責從表中刪除用戶的方法

"autoload": {
      "psr-4": {
          "Src\": "src/"
      }
  }

我們將在 src 中創(chuàng)建一個名為 Controller 的目錄,并在其中創(chuàng)建文件:PersonController.php。
該目錄中的文件負責與我們的應用程序路由交互。在這里,我們直接與銀行交互,但我們可以使用服務層并將所有邏輯和業(yè)務規(guī)則限制在該層。
如果你想創(chuàng)建服務層,那就像這樣:

services:
  mysql:
    image: mysql:9.1.0
    ports:
      - '3306:3306'
    environment:
      MYSQL_ROOT_PASSWORD: useroot
      MYSQL_USER: api_user
      MYSQL_PASSWORD: api_password
      MYSQL_DATABASE: api_example

但是,我們的目的不是深入研究這種類型的架構(gòu),現(xiàn)在我們將繼續(xù)控制器文件:

services:
  mysql:

在我們的 PersonController 類中,我們將添加:

image: mysql:9.1.0

這樣我們就可以保證與數(shù)據(jù)庫的新實例進行交互。

我們還創(chuàng)建了一個方法來處理我們的請求:

ports:
      - '3306:3306'

這個標頭負責傳輸狀態(tài)代碼,如果創(chuàng)建了一個正文,它會返回相同的正文以供查看。

environment:
      MYSQL_ROOT_PASSWORD: useroot
      MYSQL_USER: api_user
      MYSQL_PASSWORD: api_password
      MYSQL_DATABASE: api_example

我們還創(chuàng)建了與路線交互的方法:

負責與用戶的列表路由交互的方法

MYSQL_USER: api_user // <--- Este é nosso usuário

負責與用戶的創(chuàng)建路由交互的方法

MYSQL_PASSWORD: api_password // <--- Este é nosso password

負責與用戶更新路由交互的方法

MYSQL_DATABASE: api_example // <--- Este é nosso banco de dados

負責與用戶刪除路由交互的方法

MYSQL_ROOT_PASSWORD: useroot // <--- Está é a senha para o usuário root

負責驗證的方法

docker compose up -d
docker exec -it <nome do container> bash
{
  "require": {
      "vlucas/phpdotenv": "^2.4"
  },
  "autoload": {
      "psr-4": {
          "Src\": "src/"
      }
  }
}

最后,我們將在文件夾 src 之外創(chuàng)建一個名為 Public 的目錄。
該文件夾負責包含 php 顯示文件。
我們將在其中創(chuàng)建文件:index.php
我們將添加以下代碼:

"require": {
      "vlucas/phpdotenv": "^2.4"
},

此文件負責設置標頭并檢查對 url 的訪問。如果訪問成功則返回內(nèi)容,否則返回錯誤。

要訪問您的應用程序,只需使用內(nèi)部 PHP 服務器上傳服務器即可:

"autoload": {
      "psr-4": {
          "Src\": "src/"
      }
  }

如果您還沒有初始化容器,請在終端中輸入以下命令:

composer install

現(xiàn)在只需使用郵遞員或任何其他可以幫助您與網(wǎng)址交互的應用程序即可。

我的社交網(wǎng)絡:
Github Linkedin

以上是如何使用純 PHP 創(chuàng)建 API?的詳細內(nèi)容。更多信息請關注PHP中文網(wǎng)其他相關文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻,版權歸原作者所有,本站不承擔相應法律責任。如您發(fā)現(xiàn)有涉嫌抄襲侵權的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動的應用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機

Video Face Swap

Video Face Swap

使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

如何在PHP中實施身份驗證和授權? 如何在PHP中實施身份驗證和授權? Jun 20, 2025 am 01:03 AM

tosecurelyhandleauthenticationandationallizationInphp,lofterTheSesteps:1.AlwaysHashPasswordSwithPassword_hash()andverifyusingspasspassword_verify(),usepreparedStatatementStopreventsqlineptions,andStoreSeruserDatain usseruserDatain $ _sessiveferterlogin.2.implementrole-2.imaccessccsccccccccccccccccccccccccc.

如何在PHP中安全地處理文件上傳? 如何在PHP中安全地處理文件上傳? Jun 19, 2025 am 01:05 AM

要安全處理PHP中的文件上傳,核心在于驗證文件類型、重命名文件并限制權限。1.使用finfo_file()檢查真實MIME類型,僅允許特定類型如image/jpeg;2.用uniqid()生成隨機文件名,存儲至非Web根目錄;3.通過php.ini和HTML表單限制文件大小,設置目錄權限為0755;4.使用ClamAV掃描惡意軟件,增強安全性。這些步驟有效防止安全漏洞,確保文件上傳過程安全可靠。

PHP中==(松散比較)和===(嚴格的比較)之間有什么區(qū)別? PHP中==(松散比較)和===(嚴格的比較)之間有什么區(qū)別? Jun 19, 2025 am 01:07 AM

在PHP中,==與===的主要區(qū)別在于類型檢查的嚴格程度。==在比較前會進行類型轉(zhuǎn)換,例如5=="5"返回true,而===要求值和類型都相同才會返回true,例如5==="5"返回false。使用場景上,===更安全應優(yōu)先使用,==僅在需要類型轉(zhuǎn)換時使用。

如何在PHP( - , *, /,%)中執(zhí)行算術操作? 如何在PHP( - , *, /,%)中執(zhí)行算術操作? Jun 19, 2025 pm 05:13 PM

PHP中使用基本數(shù)學運算的方法如下:1.加法用 號,支持整數(shù)和浮點數(shù),也可用于變量,字符串數(shù)字會自動轉(zhuǎn)換但不推薦依賴;2.減法用-號,變量同理,類型轉(zhuǎn)換同樣適用;3.乘法用*號,適用于數(shù)字及類似字符串;4.除法用/號,需避免除以零,并注意結(jié)果可能是浮點數(shù);5.取模用%號,可用于判斷奇偶數(shù),處理負數(shù)時余數(shù)符號與被除數(shù)一致。正確使用這些運算符的關鍵在于確保數(shù)據(jù)類型清晰并處理好邊界情況。

如何與PHP的NOSQL數(shù)據(jù)庫(例如MongoDB,Redis)進行交互? 如何與PHP的NOSQL數(shù)據(jù)庫(例如MongoDB,Redis)進行交互? Jun 19, 2025 am 01:07 AM

是的,PHP可以通過特定擴展或庫與MongoDB和Redis等NoSQL數(shù)據(jù)庫交互。首先,使用MongoDBPHP驅(qū)動(通過PECL或Composer安裝)創(chuàng)建客戶端實例并操作數(shù)據(jù)庫及集合,支持插入、查詢、聚合等操作;其次,使用Predis庫或phpredis擴展連接Redis,執(zhí)行鍵值設置與獲取,推薦phpredis用于高性能場景,Predis則便于快速部署;兩者均適用于生產(chǎn)環(huán)境且文檔完善。

我如何了解最新的PHP開發(fā)和最佳實踐? 我如何了解最新的PHP開發(fā)和最佳實踐? Jun 23, 2025 am 12:56 AM

TostaycurrentwithPHPdevelopmentsandbestpractices,followkeynewssourceslikePHP.netandPHPWeekly,engagewithcommunitiesonforumsandconferences,keeptoolingupdatedandgraduallyadoptnewfeatures,andreadorcontributetoopensourceprojects.First,followreliablesource

什么是PHP,為什么它用于Web開發(fā)? 什么是PHP,為什么它用于Web開發(fā)? Jun 23, 2025 am 12:55 AM

PHPbecamepopularforwebdevelopmentduetoitseaseoflearning,seamlessintegrationwithHTML,widespreadhostingsupport,andalargeecosystemincludingframeworkslikeLaravelandCMSplatformslikeWordPress.Itexcelsinhandlingformsubmissions,managingusersessions,interacti

如何設置PHP時區(qū)? 如何設置PHP時區(qū)? Jun 25, 2025 am 01:00 AM

tosetTherightTimeZoneInphp,restate_default_timezone_set()functionAtthestArtofyourscriptWithavalIdidentIdentifiersuchas'america/new_york'.1.usedate_default_default_timezone_set_set()

See all articles