분류 php

Rest Framework 종속성없이 PHP Restful API 생성

컨텐츠 정보

  • 조회 416 (작성일 )

본문

이 PHP 튜토리얼은 API 프레임 워크없이 REST API를 만드는 데 도움이 됩니다. 이 사용자 지정 프레임 워크를 사용하여 CRUD 나머지 API를 만들 것입니다. 사용하기 매우 쉽고 사용자 지정할 수 있습니다.


필요에 따라 모든 구조와 사용자 정의 된 PHP 프레임 워크를 정의 할 수 있습니다. REST API 프레임 워크에 대한 자체 규칙을 정의하고 쉽게 액세스 할 수 있으며, php를 사용하여 Rest API를  빌드하기 위한 프레임 워크가 있어야 하는 필수 규칙은 없습니다. 핵심 PHP 코드를 사용하여 나머지 API를 만들 수도 있습니다.


PHP를 위한 멋진 나머지 프레임 워크는 다음과 같습니다.

PHP 프레임 워크없이 나머지 API 예제를 만들어 보겠습니다. 'api/'폴더를 생성하겠습니다. 이 폴더는 이 나머지 API 튜토리얼에 필요한 모든 파일을 보관합니다. HTTP Get a record, Post as request for a new record, Put이 있는 직원 모듈에 대한 나머지 API를 생성합니다. 요청을 업데이트하고 mysql에서 레코드를 삭제하기 위한 삭제 요청. 나머지 세부 사항은 다음과 같습니다.

 Route

 Method

 Type

 Posted JSON

 Description

 /employees

 GET

 JSON

 –

 모든 직원 데이터 가져 오기

 /employees/{id}

 GET

 JSON

 –

 단일 직원 데이터 가져 오기

 /employees

 POST

 JSON

 {"employee_name": "Adam", "employee_age": "34", "employee_salary" : "23421"}

 새 직원 기록을 데이터베이스에 삽입

 /employees

 PUT

 JSON

 {"employee_name": "Adam", "employee_age": "34", "employee_salary" : "23421", "id":21}

 직원 기록을 데이터베이스로 업데이트

 /employees

 DELETE

 JSON

 {"id" : 59}

 데이터베이스에서 특정 직원 기록 삭제

 
이 나머지 API 튜토리얼에서는 다음 파일을 사용할 것입니다.
  1. index.php : 이 파일은 엔트리 파일입니다.이 파일은 폴더 파일 탐색을 방지합니다.
  2. connection.php : 이 파일은 mysql 연결 문자열을 갖는 데 사용됩니다.
  3. v1/employees.php : 이 파일에는 모든 휴지 끝점(end points)과 작업 방법(action methods)이 포함됩니다.
  4. v1/.htaccess : 이 파일은 나머지 끝점(end points) 라우팅 용도로 사용됩니다.
직원 테이블 스키마 

이미 데이터베이스가 있는 경우 '테스트'MySQL 데이터베이스를 만든 다음 해당 데이터베이스 SQL 쿼리 창에서 SQL 아래를 실행하여 테이블을 만듭니다.

CREATE TABLE IF NOT EXISTS `employee` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'primary key',
  `employee_name` varchar(255) NOT NULL COMMENT 'employee name',
  `employee_salary` double NOT NULL COMMENT 'employee salary',
  `employee_age` int(11) NOT NULL COMMENT 'employee age',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 COMMENT='datatable demo table' AUTO_INCREMENT=1 ;

Mysqli를 사용하여 PHP와 MySQL 데이터베이스 연결 

connection.php 파일을 생성하고 mysqli_connect() 메서드를 사용하여 MySQL과 php를 연결하는 MySQL 연결 문자열을 추가합니다. 이 파일에 아래 코드를 추가합니다.

<!--?php
Class dbObj{
/* Database connection start */
var $servername = "localhost";
var $username = "root";
var $password = "";
var $dbname = "test";
var $conn;
function getConnstring() {
$con = mysqli_connect($this--->servername, $this->username, $this->password, $this->dbname) or die("Connection failed: " . mysqli_connect_error());

/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
} else {
$this->conn = $con;
}
return $this->conn;
}
}

?>

데이터베이스 정보에 따라 데이터베이스 이름, db 사용자 이름, db 암호 및 호스트 이름을 바꿔야 합니다.

.Htaccess Rewriterule With PHP For Clean URLs 

.htaccess 파일 v1/ 폴더를 만들고 예쁜 URL로 나머지 API에 액세스하는 규칙을 작성하고 다음 규칙을 추가합니다.

RewriteEngine On # Turn on the rewriting engine
RewriteRule ^employees/?$ employees.php [NC,L]
RewriteRule ^employees/([0-9]+)/?$ employees.php?id=$1 [NC,L]

MySQL에서 모든 레코드를 가져 오는 Restful API 

MySQL의 모든 직원 레코드에 액세스하기 위해 GET 유형 HTTP Rest 요청을 생성합니다. MySQL 쿼리를 사용하여 직원 테이블에서 데이터를 가져오고 JSON 데이터 배열을 응답 개체로 클라이언트에 보냅니다.

이제 v1 폴더에 employee.php 파일을 만들고 MySQL 연결 파일을 추가하여 데이터베이스 테이블 데이터에 액세스합니다.

// Connect to database
include("../connection.php");
$db = new dbObj();
$connection =  $db->getConnstring();

$request_method=$_SERVER["REQUEST_METHOD"];

또한 $_SERVER 메서드를 사용하여 추가, 편집 또는 삭제에 대한 나머지 요청과 같은 작업 정보에 액세스했습니다.

액션 레스트 요청에 대해 올바른 방법으로 접근 할 수 있는 php switch 메서드를 생성합니다.

switch($request_method)
{
case 'GET':
// Retrive Products
if(!empty($_GET["id"]))
{
$id=intval($_GET["id"]);
get_employees($id);
}
else
{
get_employees();
}
break;
default:
// Invalid Request Method
header("HTTP/1.0 405 Method Not Allowed");
break;
}

mysql 데이터베이스에서 모든 직원 데이터를 가져 오는 GET 요청을 생성하고, 단일 직원 데이터에 대해 직원 ID를 전달하고 있으며 get_employees() 메서드를 정의하여 아래와 같은 메서드를 생성합니다.

function get_employees()
{
global $connection;
$query="SELECT * FROM employee";
$response=array();
$result=mysqli_query($connection, $query);
while($row=mysqli_fetch_array($result))
{
$response[]=$row;
}
header('Content-Type: application/json');
echo json_encode($response);
}

mysqli_query() 메서드는 abject로 저장된 MySQL 직원 테이블에서 데이터를 'result'변수에 가져옵니다. json_encode() 메서드는 데이터 배열을 json 문자열로 변환합니다.

이제 http : //localhost/api/v1/employees rest api url form 브라우저에 액세스하면 mysql employee 테이블에서 모든 직원 레코드를 얻을 수 있습니다.

PHP를 사용하여 MySQL에서 단일 레코드를 얻는 Restful API 

php를 사용하여 MySQL 데이터베이스에서 단일 직원 레코드에 액세스하기 위한 HTTP GET 유형 휴식 요청을 생성합니다. 이전의 나머지 호출과 동일하게 기능에서 직원 ID를 전달했습니다.

function get_employees($id=0)
{
global $connection;
$query="SELECT * FROM employee";
if($id != 0)
{
$query.=" WHERE id=".$id." LIMIT 1";
}
$response=array();
$result=mysqli_query($connection, $query);
while($row=mysqli_fetch_array($result))
{
$response[]=$row;
}
header('Content-Type: application/json');
echo json_encode($response);
}

이제 http://localhost/api/v1/employees/1 rest api url 양식 브라우저에 액세스하면 mysql 직원 테이블에서 단일 직원 레코드를 얻을 수 있습니다.

MySQL에 새 레코드를 생성하는 Rest API 

php를 사용하여 새 직원 레코드를 MySQL에 삽입하는 새 Rest Api를 생성합니다. JSON 데이터를 PHP 서버에 게시 할 것이기 때문에 POST 유형의 Rest 요청을 생성합니다.

아래와 같이 스위치 방식에 새로운 케이스를 추가하겠습니다.

case 'POST':
// Insert Product
insert_employee();
break;

이제 employee.php 파일에 insert_employee() 메서드를 생성합니다.

function insert_employee()
{
global $connection;

$data = json_decode(file_get_contents('php://input'), true);
$employee_name=$data["employee_name"];
$employee_salary=$data["employee_salary"];
$employee_age=$data["employee_age"];
echo $query="INSERT INTO employee SET employee_name='".$employee_name."', employee_salary='".$employee_salary."', employee_age='".$employee_age."'";
if(mysqli_query($connection, $query))
{
$response=array(
'status' => 1,
'status_message' =>'Employee Added Successfully.'
);
}
else
{
$response=array(
'status' => 0,
'status_message' =>'Employee Addition Failed.'
);
}
header('Content-Type: application/json');
echo json_encode($response);
}

PHP를 사용하여 MySQL로 레코드를 업데이트하는 Rest Api 

MySQL 데이터베이스에 데이터를 업데이트하기 위해 새로운 HTTP PUT 유형 Restful api 요청을 생성 할 것입니다. 직원 테이블에 레코드를 업데이트하는 데 사용할 매개 변수로 직원 ID를 전달해야 합니다.

아래와 같이 스위치 방식에 새로운 케이스를 추가하겠습니다.

case 'PUT':
// Update Product
$id=intval($_GET["id"]);
update_employee($id);
break;

이제 employee.php 파일에 update_employee() 메서드를 생성하고 업데이트하려는 employee_id를 사용하고 두 번째는 json 형식의 업데이트 된 데이터입니다.

function update_employee($id)
{
global $connection;
$post_vars = json_decode(file_get_contents("php://input"),true);
$employee_name=$post_vars["employee_name"];
$employee_salary=$post_vars["employee_salary"];
$employee_age=$post_vars["employee_age"];
$query="UPDATE employee SET employee_name='".$employee_name."', employee_salary='".$employee_salary."', employee_age='".$employee_age."' WHERE id=".$id;
if(mysqli_query($connection, $query))
{
$response=array(
'status' => 1,
'status_message' =>'Employee Updated Successfully.'
);
}
else
{
$response=array(
'status' => 0,
'status_message' =>'Employee Updation Failed.'
);
}
header('Content-Type: application/json');
echo json_encode($response);
}

우리는 employee_id를 param 및 json 데이터로 사용하여 레코드를 mysql 테이블에 업데이트했습니다. 모든 것이 정상이면 '업데이트 된 메시지'를 보내고 그렇지 않으면 오류 메시지를 보냅니다.

MySQL에서 레코드를 삭제하는 Rest API 

MySQL 데이터베이스에서 직원 레코드를 제거하기 위해 php를 사용하여 새로운 DELETE Type restful api 요청을 생성하고 employee_id를 직원 테이블에서 삭제할 매개 변수로 전달합니다.

아래와 같이 스위치 방식에 새로운 케이스를 추가하겠습니다.

case 'DELETE':
// Delete Product
$id=intval($_GET["id"]);
delete_employee($id);
break;

이제 employee.php 파일에 delete_employee() 메서드를 생성하고 직원 테이블에서 레코드를 삭제하려는 employee_id를 사용합니다.

function delete_employee($id)
{
global $connection;
$query="DELETE FROM employee WHERE id=".$id;
if(mysqli_query($connection, $query))
{
$response=array(
'status' => 1,
'status_message' =>'Employee Deleted Successfully.'
);
}
else
{
$response=array(
'status' => 0,
'status_message' =>'Employee Deletion Failed.'
);
}
header('Content-Type: application/json');
echo json_encode($response);
}

결론 

모든 직원을 가져오고, 단일 직원 기록을 가져오고, 새 직원 항목을 생성하고, 직원 데이터를 업데이트하고, MySQL 데이터베이스에서 직원 데이터를 삭제하는 Restful API를 만들었습니다. 토큰과 같은 보안 관련 옵션을 추가하여 권한이 없는 사용자의 나머지 API 액세스를 제한 할 수 있습니다.