> 백엔드 개발 > PHP 튜토리얼 > PHP 및 MySQL을 사용하여 RESTful API를 구축하는 방법 알아보기

PHP 및 MySQL을 사용하여 RESTful API를 구축하는 방법 알아보기

PHPz
풀어 주다: 2023-06-19 16:14:01
원래의
872명이 탐색했습니다.

웹 개발이 발전하면서 RESTful API는 최신 웹 애플리케이션의 표준 중 하나가 되었습니다. 기존 API에 비해 RESTful API는 더 유연하고 확장 가능합니다. 널리 사용되는 웹 개발 도구인 PHP 및 MySQL을 사용하여 RESTful API를 구축할 수도 있습니다. 이 기사에서는 PHP와 MySQL을 사용하여 RESTful API를 구축하는 방법을 자세히 소개하고 코드 예제와 고려 사항을 제공합니다.

1. RESTful API 소개

RESTful API는 HTTP 프로토콜과 표준 데이터 형식을 기반으로 하는 웹 API 설계 형식입니다. 일반적으로 HTTP 동사(GET, POST, PUT, DELETE 등)를 사용하여 리소스에 대한 작업을 수행하고 HTTP 상태 코드를 사용하여 작업 결과를 나타냅니다. RESTful API의 설계 원칙에는 리소스, 표현 상태 전송, 통합 인터페이스, 자체 포함 및 하이퍼미디어가 포함됩니다.

2. PHP 및 MySQL을 사용하여 RESTful API 구축

  1. PHP 및 MySQL 설치 및 구성

먼저 여기에 설명되지 않은 PHP 및 MySQL을 설치하고 구성해야 합니다. 설치가 완료된 후 phpinfo 기능을 이용하여 PHP가 제대로 작동하는지 확인하거나, MySQL에 테스트 데이터베이스를 생성하여 MySQL이 제대로 작동하는지 확인할 수 있습니다.

  1. RESTful API의 기본 구조 만들기

다음으로 RESTful API의 기본 구조를 만들어야 합니다. 첫 번째는 다음 코드를 사용하는 데이터베이스 연결입니다.

<?php
 
//数据库连接参数 
define('DB_HOST', 'localhost'); 
define('DB_USER', 'root'); 
define('DB_PASS', ''); 
define('DB_NAME', 'test');
 
//建立数据库连接 
function connect() {
    $mysqli = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
    if(mysqli_connect_errno()) {
        die("Database connection failed: " . mysqli_connect_error());
    }
    return $mysqli;
}
 
//关闭数据库连接 
function disconnect($mysqli) {
    $mysqli -> close();
}
 
?>
로그인 후 복사

여기서는 전통적인 mysql 연결 방법 대신 객체 지향 mysqli 연결이 사용된다는 점에 유의해야 합니다.

다음으로 HTTP 요청 및 응답의 동작을 정의하는 기본 RESTful API 클래스를 생성해야 합니다. 여기에는 GET, POST, PUT 및 DELETE의 네 가지 HTTP 동사가 정의되어 있습니다. 다음 코드를 사용하세요.

<?php
 
require_once('db_connect.php');
 
class Rest {
 
    protected $request;
    protected $mysqli;
    protected $method;
    protected $args;
    protected $resource = '';
    protected $statusCodes = array(
        200 => 'OK',
        201 => 'Created',
        202 => 'Accepted',
        204 => 'No Content',
        400 => 'Bad Request',
        401 => 'Unauthorized',
        403 => 'Forbidden',
        404 => 'Not Found',
        406 => 'Not Acceptable',
        500 => 'Internal Server Error'
    );
 
    public function __construct() {
        $this -> mysqli = connect();
        $this -> request = explode('/', trim($_SERVER['PATH_INFO'], '/'));
        $this -> method = $_SERVER['REQUEST_METHOD'];
        $this -> args = $_SERVER['QUERY_STRING'];
        $this -> resource = array_shift($this -> request);
    }
 
    public function processRequest() {
 
        switch($this -> method) {
            case 'POST':
                $response = $this -> create();
                break;
            case 'PUT':
                $response = $this -> update();
                break;
            case 'DELETE':
                $response = $this -> delete();
                break;
            case 'GET':
            default:
                $response = $this -> read();
                break;
        }
 
        header('HTTP/1.1 ' . $this -> statusCodes[$response['status']]);
        header('Content-Type: application/json; charset=utf-8');
 
        return json_encode($response['data']);
    }
 
    protected function create() {}
    protected function read() {}
    protected function update() {}
    protected function delete() {}
 
}
 
?>
로그인 후 복사

이 클래스의 생성자는 HTTP 요청의 메서드, 경로 및 매개 변수를 구문 분석하고 이를 개체 속성에 저장합니다. 그런 다음 HTTP 메서드에 따라 해당 메서드를 호출하여 요청을 처리합니다.

  1. RESTful API의 CRUD 작업 구현

다음으로 RESTful API 클래스에서 CRUD 작업을 구현해야 합니다. 사용자를 예로 들어 다음 코드를 사용합니다.

class UserAPI extends Rest {
 
    public function create() {
        $data = json_decode(file_get_contents("php://input"), true);
        $username = $data['username'];
        $password = $data['password'];
        $email = $data['email'];
 
        if(!empty($username) && !empty($password) && !empty($email)) {
            $stmt = $this -> mysqli -> prepare("INSERT INTO users (username, password, email) VALUES (?, ?, ?)");
            $stmt -> bind_param("sss", $username, $password, $email);
            $stmt -> execute();
            $stmt -> close();
            $response['status'] = 201;
            $response['data'] = "User created successfully.";
        } else {
            $response['status'] = 400;
            $response['data'] = "Invalid parameters.";
        }
 
        return $response;
    }
 
    public function read() {
        $id = array_shift($this -> request);
        if(empty($id)) {
            $result = $this -> mysqli -> query("SELECT * FROM users");
            while($row = $result -> fetch_assoc()) {
                $data[] = $row;
            }
            $response['status'] = 200;
            $response['data'] = $data;
        } else {
            $result = $this -> mysqli -> query("SELECT * FROM users WHERE id = $id");
            if($result -> num_rows == 1) {
                $response['status'] = 200;
                $response['data'] = $result -> fetch_assoc();
            } else {
                $response['status'] = 404;
                $response['data'] = "User not found.";
            }
        }
        return $response;
    }
 
    public function update() {
        $id = array_shift($this -> request);
        $data = json_decode(file_get_contents("php://input"), true);
        $username = $data['username'];
        $password = $data['password'];
        $email = $data['email'];
 
        if(!empty($username) && !empty($password) && !empty($email)) {
            $stmt = $this -> mysqli -> prepare("UPDATE users SET username=?, password=?, email=? WHERE id=?");
            $stmt -> bind_param("sssi", $username, $password, $email, $id);
            $stmt -> execute();
            $stmt -> close();
            $response['status'] = 200;
            $response['data'] = "User updated successfully.";
        } else {
            $response['status'] = 400;
            $response['data'] = "Invalid parameters.";
        }
 
        return $response;
    }
 
    public function delete() {
        $id = array_shift($this -> request);
        $result = $this -> mysqli -> query("SELECT * FROM users WHERE id = $id");
        if($result -> num_rows == 1) {
            $this -> mysqli -> query("DELETE FROM users WHERE id = $id");
            $response['status'] = 200;
            $response['data'] = "User deleted successfully.";
        } else {
            $response['status'] = 404;
            $response['data'] = "User not found.";
        }
        return $response;
    }
 
}
로그인 후 복사

UserAPI 클래스가 여기에 정의되어 있으며 생성, 읽기, 업데이트 및 삭제 메서드를 구현합니다. POST 요청의 경우 Json 데이터는 사용자 이름, 비밀번호 및 이메일 주소로 구문 분석되고 GET 요청의 경우 사용자 테이블에 삽입됩니다. URL에 id 매개변수가 포함되어 있으면 해당 사용자 정보가 반환되고, 그렇지 않으면 모든 사용자 정보가 반환됩니다. PUT 요청의 경우 Json 데이터를 사용자 이름, 비밀번호 및 이메일 주소로 구문 분석하고 DELETE 요청의 경우 해당 사용자 정보를 업데이트하고 URL의 id 매개변수에 따라 해당 사용자를 삭제합니다.

  1. RESTful API 사용

RESTful API를 생성한 후, 컬과 같은 도구를 사용하여 API가 제대로 작동하는지 테스트할 수 있습니다. 다음 컬 명령을 사용하여 RESTful API에 대한 사용자를 생성합니다.

curl -H "Content-Type: application/json" -X POST -d '{
    "username":"testuser",
    "password":"testpassword",
    "email":"testuser@example.com"
}' http://localhost/user
로그인 후 복사

다음 컬 명령을 사용하여 모든 사용자를 반환합니다.

curl http://localhost/user
로그인 후 복사

다음 컬 명령을 사용하여 사용자 정보를 업데이트합니다.

curl -H "Content-Type:application/json" -X PUT -d '{
    "username":"newusername",
    "password":"newpassword",
    "email":"newusername@example.com"
}' http://localhost/user/1
로그인 후 복사

다음 컬 명령을 사용하여 사용자를 삭제합니다. :

curl -X DELETE http://localhost/user/1
로그인 후 복사

3. 주의사항

RESTful API를 구축할 때 다음 사항에 주의해야 합니다.

  1. 데이터베이스 보안. RESTful API는 일반적으로 데이터베이스와 상호 작용해야 하며 SQL 주입과 같은 보안 문제가 있을 수 있습니다. 데이터 보안을 보장하려면 매개변수화된 쿼리 및 기타 방법을 사용해야 합니다.
  2. 교차 도메인 문제. RESTful API는 다른 도메인 이름의 애플리케이션에서 호출되어 도메인 간 문제를 일으킬 수 있습니다. Access-Control-Allow-Origin 및 기타 관련 HTTP 헤더를 설정해야 합니다.
  3. API 버전 관리. 기존 API에 영향을 주지 않도록 RESTful API를 설계할 때 버전 제어를 고려해야 합니다.
  4. HTTP 상태 코드. RESTful API의 반환 값은 요청 결과를 나타내기 위해 HTTP 상태 코드를 올바르게 사용해야 합니다.

4. 요약

이 글에서는 PHP와 MySQL을 사용하여 RESTful API를 구축하는 방법을 소개하고 코드 예제와 주의사항을 제공합니다. RESTful API의 장점은 유연성, 확장성, 유지 관리 용이성 등입니다. 웹 개발에 없어서는 안 될 부분입니다. RESTful API를 사용할 때는 보안, 도메인 간 문제, 버전 제어, HTTP 상태 코드 등의 문제에 주의해야 합니다.

위 내용은 PHP 및 MySQL을 사용하여 RESTful API를 구축하는 방법 알아보기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿