Slim에서 JSON을 반환 할 때까지 메모

10367 단어 PHP슬림

개요



PHP의 경량 프레임 워크인 Slim을 만져 보았으므로 메모.
WebAPI를 구현하고 응답으로 JSON을 반환하는 곳까지.

환경



macOS 10.13.6
PHP 7.1.23
composer 1.8.0
Slim 4.0.0

설치



공식 사이트 에 나와 있는 절차에 따라 설치를 진행합니다.
$ mkdir slim-test
$ cd slim-test
$ composer require slim/slim:4.0.0
$ composer require slim/psr7

이것으로 최소 설치가 완료됩니다.

동작 확인



Hello world 보기



현재의 디렉토리 구성은 아래와 같이 되어 있을 것이므로, slim-test 이하에 public 디렉토리를 작성해, index.php 를 기술해 갑니다.
.
├── composer.json
├── composer.lock
└── vendor
    ├── autoload.php
    ├── composer
・・・省略・・・
$ mkdir public
$ vi public/index.php

index.php
<?php
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use Slim\Factory\AppFactory;

require __DIR__ . '/../vendor/autoload.php';

$app = AppFactory::create();

$app->get('/', function (Request $request, Response $response, $args) {
    $response->getBody()->write("Hello world!");
    return $response;
});

$app->run();

작성하면 아래 명령을 실행하여 브라우저에서 "localhost:8080"에 액세스하면 Hello world!라고만 기재된 페이지를 확인할 수 있습니다.
$ php -S localhost:8080 -t public
PHP 7.1.23 Development Server started at Sun Aug 25 15:27:28 2019
Listening on http://localhost:8080
Document root is /path/to/slim-test/public
Press Ctrl-C to quit.



JSON 반환



현재라고 하면 「Hello world!」라고 하는 캐릭터 라인을 돌려주고 있을 뿐이므로, JSON을 돌려주도록(듯이) 수정합니다.
※Slim의 v3와 v4로 쓰는 방법이 다르므로 주의해 주세요.

index.php
<?php
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use Slim\Factory\AppFactory;

require __DIR__ . '/../vendor/autoload.php';

$app = AppFactory::create();

$app->get('/', function (Request $request, Response $response, $args) {
    $data = array('response' => 'Hello world!');
    $payload = json_encode($data);
    $response->getBody()->write($payload);
    return $response->withHeader('Content-Type', 'application/json');
});

$app->run();

이전처럼 브라우저에서 액세스하거나 curl 명령을 실행하여 응답을 확인합니다.


$ curl localhost:8080
{"response":"Hello world!"}

이제 요청에 대해 JSON을 반환할 수 있었습니다.

매개변수 수신



응답을 고정으로 돌려주고 있으므로, 받은 파라미터를 반영시켜 보겠습니다.

index.php
<?php
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use Slim\Factory\AppFactory;

require __DIR__ . '/../vendor/autoload.php';

$app = AppFactory::create();

$app->get('/', function (Request $request, Response $response, $args) {
    $params = $request->getQueryParams();
    $data = array('response' => 'Hello '.$params['name']);
    $payload = json_encode($data);
    $response->getBody()->write($payload);
    return $response->withHeader('Content-Type', 'application/json');
});

$app->run();
$ curl localhost:8080?name=hogehoge
{"response":"Hello hogehoge"}

최종 디렉토리 구성


.
├── README.md
├── composer.json
├── composer.lock
├── public
│   └── index.php
└── vendor
    ├── autoload.php
    ├── composer
・・・省略・・・

감상



간편하게 WebAPI를 구현할 수 있는 점은 훌륭했습니다. JSON을 돌려주는 쓰는 방법이 v3와 v4로 다른 점에서 조금 주저했기 때문에, 버전의 차이에 주의하지 않으면 안 되었습니다.
비망록적으로 쓰고 있기 때문에, 좀더 이러한 쪽이 좋다든지 내용 잘못하고 있다든가 있으면 지적해 주세요.

참고 사이트


  • Response - Slim Framework
  • Request - Slim Framework
  • 좋은 웹페이지 즐겨찾기