이 프로젝트에서는 모든 프레임워크에서 PHP만을 사용하여 Simple API를 생성합니다. 우리에게 필요한 것은 다음과 같습니다:
데이터베이스 구성을 위한 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.json 및 package-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 모듈을 사용하고 있습니다
오류 사례:
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!