Pure PHP로 API를 만드는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2024-11-04 06:11:01
원래의
863명이 탐색했습니다.

Como criar API com PHP Puro?

이 프로젝트에서는 모든 프레임워크에서 PHP만을 사용하여 Simple API를 생성합니다. 우리에게 필요한 것은 다음과 같습니다:

  • PHP - 필수
  • 작곡가 - 필수
  • VScode 또는 PHPStorm과 같은 편집기/IDE
  • Docker - 선호되지만 필수는 아님
  • 우체부 - 선호되지만 필수는 아님

데이터베이스 구성을 위한 docker-compose.yml 파일을 정의하는 것부터 시작하겠습니다. Docker를 사용하여 컨테이너에 데이터베이스를 생성하지 않으려는 경우 해결 방법은 머신에 데이터베이스를 설치하는 것입니다. 이 튜토리얼에서는 MySQL을 사용합니다.

설정

애플리케이션이 위치할 폴더를 생성한 후 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으로 지정하겠습니다. 주의, 이 서비스의 이름은 데이터베이스에 호스트로 연결하는 데 사용됩니다

image: mysql:9.1.0
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

다음으로 데이터베이스를 생성하는 데 사용할 이미지를 정의합니다. 이 프로젝트에서는 mysql 버전 9.1.0
을 사용하고 있습니다.
Docker Hub에서 이 버전과 다른 버전을 찾을 수 있습니다.

ports:
      - '3306:3306'
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

포트는 3306

으로 설정 중입니다. 이것이 기본 mysql 포트입니다!

포트가 3306:3306과 같은 것을 알 수 있습니다. 이 :
는 도커 컨테이너뿐만 아니라 로컬 시스템에서 이 포트를 수신하고 싶다는 의미입니다. 그러면 우리 컴퓨터에서 직접 액세스할 수 있습니다.

environment:
      MYSQL_ROOT_PASSWORD: useroot
      MYSQL_USER: api_user
      MYSQL_PASSWORD: api_password
      MYSQL_DATABASE: api_example
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사


환경으로서 mysql 서비스에 대한 자격 증명을 정의해야 합니다.
따라서 환경 변수를 사용하여 사용자, 비밀번호 및 데이터베이스 이름을 정의합니다.

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
로그인 후 복사
로그인 후 복사
로그인 후 복사


이렇게 하면 컨테이너에서 mysql 서비스가 초기화됩니다.
터미널 내에서 mysql에 액세스하려면 다음 명령을 사용할 수 있습니다.

docker exec -it <nome do container> bash
로그인 후 복사
로그인 후 복사
로그인 후 복사

이 명령을 입력하고 Enter 키를 누르면 mysql 이미지가 실행 중인 컨테이너로 들어갑니다.


컨테이너 이름은 폴더 이름-호스트 이름-번호로 구성됩니다 이 경우 애플리케이션이 "create-api-php" 디렉터리 내에 생성된 경우 컨테이너 이름은 create-api-php-mysql-1

이 됩니다.

또한 작곡가.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
에서 이 lib의 저장소를 찾을 수 있습니다.

services:
  mysql:
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

아래 줄에서는 기본적으로 PSR-4의 기본 구성으로 자동 로드를 사용한다는 의미입니다. 현재 가장 많이 사용되는 PSR은 PSR-12와 PSR-4이며, 현재까지 가장 많이 사용되는 것은 12개입니다. 하지만 지금은 PSR-4를 계속 사용할 것입니다.

image: mysql:9.1.0
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

이 두 파일이 생성되면 명령을 내릴 수 있습니다

ports:
      - '3306:3306'
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

Dotenv 라이브러리를 설치하고 원하는 PSR에 대한 설정을 구성합니다.
이 명령 후에는 우리 환경에 작곡가.lock.

파일이 생성됩니다.

JavaScript 세계의 경우 이 파일을 package.jsonpackage-lock.json과 비교할 수 있습니다.

또한 Vendor라는 이름의 폴더가 디렉토리에 추가된 것을 볼 수 있습니다. 이 폴더에는 Dotenv lib와 매우 중요한 파일인 autoload.php가 포함되어 있습니다.
이 파일은 다른 파일 간의 Dotenv 정보 거래를 담당하므로 이 파일의 어떤 것도 만지거나 변경할 필요가 없습니다.

또한 bootstrap.php라는 파일도 생성할 것입니다. 이 파일은 애플리케이션을 초기화하고 일부 중요한 매개변수를 연결하여 모든 것이 예상대로 작동하도록 하는 역할을 합니다.

environment:
      MYSQL_ROOT_PASSWORD: useroot
      MYSQL_USER: api_user
      MYSQL_PASSWORD: api_password
      MYSQL_DATABASE: api_example
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

그런 다음 .env 파일을 생성하여 mysql 데이터베이스 연결을 담당할 환경 변수를 추가할 수 있습니다.
그런 다음 다음을 추가합니다.

MYSQL_USER: api_user // <--- Este é nosso usuário
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

누군가가 우리 저장소를 복제하려고 하거나 나중에 프로젝트를 계속하려는 경우를 대비해 이 정보의 복사본이 저장되는 .env.example 파일도 만들 것입니다. 정의해야 할 것과 필요하지 않은 것을 알기 위해 필요한 정보를 제공합니다.

MYSQL_PASSWORD: api_password // <--- Este é nosso password
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

모든 정보를 포함하는 파일과 정보의 일부만 포함하는 파일 두 개를 만드는 이유는 .env 파일에 기밀 정보가 포함되어 있으므로 저장소에 업로드해서는 안 되기 때문입니다. 나중에 액세스를 위해 토큰을 추가해야 하는 타사 API를 사용하고 이 정보를 .env 파일에 저장한다고 가정해 보겠습니다.

.env 파일이 저장소에 업로드되는 것을 방지하기 위해 .gitignore라는 파일을 만들고 다음 정보를 추가합니다.

MYSQL_DATABASE: api_example // <--- Este é nosso banco de dados
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

이 방법으로 .env 파일과 공급업체 폴더의 전체 내용이 커밋되지 않도록 정의합니다.

이제 프로젝트 구성이 완료되었으며 코딩을 계속할 수 있습니다.

법전 편찬

다음 디렉터리 src/System을 생성하고 시스템 내에 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
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

이 파일에 대한 네임스페이스를 정의하여 나중에 다른 파일 내에서 사용할 수 있도록 합니다.

services:
  mysql:
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

파일과 동일한 이름으로 클래스를 생성하고 null 값을 전달하는 $dbConnection이라는 이름의 전용 변수를 생성합니다.
이 변수는 이 클래스의 새 인스턴스를 담당하고 데이터베이스와 연결합니다.
나중에 try-catch를 구현할 때 더 자세히 살펴보겠습니다.

image: mysql:9.1.0
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

생성자 내에서 다음 변수를 생성하고 .env 파일에서 캡처한 값을 Dotenv로 확인합니다.

ports:
      - '3306:3306'
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

여전히 생성자 내에서 수행하려는 작업을 검증하기 위해 try-catch를 수행합니다.

environment:
      MYSQL_ROOT_PASSWORD: useroot
      MYSQL_USER: api_user
      MYSQL_PASSWORD: api_password
      MYSQL_DATABASE: api_example
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

이 시도에서는 클래스의 새 인스턴스를 생성하고 이를 $dbConnection 변수에 전달하려고 합니다. 이를 위해 매개변수를 수신하는 PDO 모듈을 사용하고 있습니다

  • DSN - 데이터 소스 이름 또는 URI
  • - mysql: 우리가 사용하는 서비스/은행이 되기.
  • - 호스트=$호스트; 우리 호스트
  • - 포트=$포트; 우리 문
  • - charset=utf8mb4; 데이터베이스의 utf8 문자 집합 정의
  • - dbname=$db 데이터베이스 이름
  • USER - 데이터베이스에 로그인하는 사용자
  • PASS - 데이터베이스 로그인용 비밀번호

오류 사례:

MYSQL_USER: api_user // <--- Este é nosso usuário
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

PDO에서 예외가 발생하고 오류 메시지가 반환됩니다.
분명히 이것은 개발 환경에서 오류를 어떻게 표시해야 하는지에 대한 예일 뿐입니다. 프로덕션 환경의 경우 문제를 보다 명확하게 이해하는 데 도움이 되는 보다 간결한 오류를 제시하는 것이 좋습니다.

생성자 외부, 클래스 내부에서 다음 함수를 생성합니다.

MYSQL_PASSWORD: api_password // <--- Este é nosso password
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

연결 인스턴스가 포함된 변수를 호출하는 역할을 담당합니다.

bootstrap.php 파일을 기억하시나요? 여기에 다음 코드 줄을 추가해 보겠습니다.

MYSQL_DATABASE: api_example // <--- Este é nosso banco de dados
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

이렇게 생겼습니다:

MYSQL_ROOT_PASSWORD: useroot // <--- Está é a senha para o usuário root
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

src 폴더 안에 Database라는 이름의 또 다른 디렉터리를 만들고 그 안에 Database_seed.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
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

require 'bootstrap.php'를 가져옵니다. 왜냐하면 부트스트랩 파일 내에서 데이터베이스 인스턴스화를 담당하는 변수를 이미 가져왔기 때문입니다.

services:
  mysql:
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

Heredoc
값을 갖는 $statement라는 이름의 변수를 생성합니다.

image: mysql:9.1.0
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

Heredoc에 몇 가지 쿼리를 추가합니다.

ports:
      - '3306:3306'
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

여기에서는 드롭 테이블을 선택하여 전체 베이스를 삭제한 다음 새 베이스를 시작합니다. 하지만 원하는 경우 이 코드 줄을 제거할 수 있습니다.

다음 코드 줄은 이 테이블이 트랜잭션을 수행하는 데 사용되고 테이블 간에 연결되도록 지정합니다. 이 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
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

여기서는 person 테이블에 일부 데이터를 삽입합니다.

파일 끝에 쿼리를 초기화하려고 시도하는 try-catch를 만들고, 오류가 발생하면 위 코드의 데이터 처리에서 했던 것처럼 오류 메시지를 반환합니다. .

MYSQL_PASSWORD: api_password // <--- Este é nosso password
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

src 내부에 TableGateways라는 이름의 또 다른 디렉터리를 만들고 그 안에 PersonGateway.php라는 파일을 만듭니다.

MYSQL_DATABASE: api_example // <--- Este é nosso banco de dados
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

이 폴더 내의 파일은 거의 저장소처럼 데이터베이스와 상호 작용합니다.

PersonGateway 클래스에 다음 생성자를 추가합니다.

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/"
      }
  }
}
로그인 후 복사
로그인 후 복사

테이블의 사용자 정보를 업데이트하는 방법

"require": {
      "vlucas/phpdotenv": "^2.4"
},
로그인 후 복사
로그인 후 복사

테이블에서 사용자를 삭제하는 방법

"autoload": {
      "psr-4": {
          "Src\": "src/"
      }
  }
로그인 후 복사
로그인 후 복사

src 내에 Controller라는 이름의 디렉토리를 생성하고 그 안에 PersonController.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
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

그러나 우리의 의도는 이러한 유형의 아키텍처를 더 깊이 파고드는 것이 아니며 지금은 컨트롤러 파일을 계속 사용하겠습니다.

services:
  mysql:
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

PersonController 클래스 내부에 다음을 추가합니다.

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
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

또한 경로와 상호 작용할 메서드도 만들었습니다.

사용자의 목록 경로와 상호작용을 담당하는 방법

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 up -d
로그인 후 복사
로그인 후 복사
로그인 후 복사
docker exec -it <nome do container> bash
로그인 후 복사
로그인 후 복사
로그인 후 복사
{
  "require": {
      "vlucas/phpdotenv": "^2.4"
  },
  "autoload": {
      "psr-4": {
          "Src\": "src/"
      }
  }
}
로그인 후 복사
로그인 후 복사

마지막으로 src 폴더 외부에 Public이라는 이름의 디렉터리를 만듭니다.
이 폴더에는 PHP 표시 파일이 들어 있습니다.
그 안에 index.php
파일을 생성하겠습니다. 다음 코드를 추가하겠습니다:

"require": {
      "vlucas/phpdotenv": "^2.4"
},
로그인 후 복사
로그인 후 복사

이 파일은 헤더 설정과 URL에 대한 액세스 확인을 담당합니다. 접근에 성공하면 내용을 반환하고, 실패하면 오류를 반환합니다.

애플리케이션에 액세스하려면 내부 PHP 서버를 사용하여 서버를 업로드하세요.

"autoload": {
      "psr-4": {
          "Src\": "src/"
      }
  }
로그인 후 복사
로그인 후 복사

컨테이너를 초기화하지 않은 경우 터미널에 다음 명령을 입력하세요.

composer install
로그인 후 복사

이제 우편 배달부나 URL과 상호 작용하는 데 도움이 되는 기타 애플리케이션을 사용하세요.

내 소셜 네트워크:
Github 링크드인

위 내용은 Pure PHP로 API를 만드는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!