티스토리 뷰
개요
만약 나보고 PHP 기반의 REST API를 구축하라고 한다면 가장 먼저 선택할 프레임워크는 가장 성능이 좋은 Phalcon
이다. 지난 글에서도 많이 다룬 적이 있다. 2순위로는 가장 대중적인 Laravel
기반의 Lumen
을 선택할 것이다. 만약 PHP 5.3.2라는 제약사항이 있다면? 앞서 언급한 마이크로 프레임워크들은 구닥다리가 되버린 PHP 5.3.2 버전을 지원하지 않는다. 이 경우 선택지는 Flight
이다. PHP 5.3.0 이상이면 어디서나 작동하는 가볍고 직관적인 마이크로 프레임워크이다. 본 글에서는 간단힌 Flight
기반의 REST API 작성법을 소개하겠다.
사전지식
Composer 설정
Composer
없는 세상은 상상만 해도 끔찍하다. 다행히도 Composer는 PHP 5.3.2부터 지원한다. 주의할 점은 Composer 1.0.3을 설치해야 한다. 이후 버전은 PHP 5.6 이상 만을 지원한다.
- 프로젝트 루트 디렉토리에
composer.json
파일을 아래와 같이 작성한다.
{
"require": {
"mikecao/flight": "^1.3"
},
"autoload": {
"psr-4": {
"HelloFlight\\": "src/HelloFlight/"
}
}
}
- 프로젝트 루트 디렉토리에서 아래와 같이 실행한다.
$ composer install
$ composer dump-autoload --optimize
composer install
명령을 실행하면 써드파티 라이브러리를 프로젝트에 설치해준다. (본 예제에서는 Flight 마이크로 프레임워크를 설치한다.)composer dump-autoload --optimize
명령은 프로젝트 내부 클래스에 대한 최적화된 오토로더를 생성해준다. 프로젝트 배포 전 매번 수작업으로 실행해 주어야 한다.
프로젝트 구조
작성될 프로젝트 구조는 아래와 같다.
/src
/HelloFlight
/Controllers
HelloController.php
/vendor
/composer
/mikecao
/flight
autoload.php
.htaccess
composer.json
index.php
.htaccess
Pretty Urls
로 들어오는 모든 요청을 index.php
가 처리하게 하려면 프로젝트 루트에 .htaccess
를 아래와 같이 작성한다.
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [QSA,L]
index.php
HTTP 요청의 진입점이 되는 index.php
를 프로젝트 루트 디렉토리에 아래와 같이 작성한다.
require __DIR__ . '/vendor/autoload.php';
Flight::route('GET /hello/@name', array(new \HelloFlight\Controllers\HelloController(), 'world'));
Flight::start();
- 가장 먼저 컴포저가 생성한
/vendor/autoload.php
오토로더를 호출한다. Flight
클래스를 이용하여 라우팅을 설정한다.GET /hello/@name
으로 들어오는 요청은HelloController->world()
가 처리하도록 한다.
HelloController.php
앞서 요청을 처리할 HelloController.php를 아래와 같이 작성한다.
<?php
namespace HelloFlight\Controllers;
class HelloController
{
public function world($name)
{
\Flight::json(array('name' => $name));
}
}
- 앞서 주소 패턴을 살펴보면
/hello/@name
이었다. @name을 호출 메써드의 아규먼트인 $name로 받는 것을 확인할 수 있다. \Flight::json()
은 데이터를 JSON으로 응답하고 요청을 종료한다.- 요청을 실행해 보기 전에 새로 작성한 클래스를 반영하기 위해 오토로더를 재생성한다.
$ composer dump-autoload --optimize
- 실행 결과는 아래와 같다.
GET /hello/world
{
"name": "world"
}
참고 글
댓글
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- maven
- 알뜰폰
- CentOS
- Tomcat
- Spring Boot
- Eclipse
- 로드바이크
- bootstrap
- chrome
- jsp
- jpa
- jstl
- MySQL
- 태그를 입력해 주세요.
- Spring MVC 3
- kotlin
- Kendo UI Web Grid
- Kendo UI
- graylog
- 평속
- 자전거
- spring
- 로드 바이크
- JavaScript
- node.js
- Docker
- java
- JHipster
- DynamoDB
- 구동계
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함