Slim에서 JSON을 반환 할 때까지 메모
개요
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로 다른 점에서 조금 주저했기 때문에, 버전의 차이에 주의하지 않으면 안 되었습니다.
비망록적으로 쓰고 있기 때문에, 좀더 이러한 쪽이 좋다든지 내용 잘못하고 있다든가 있으면 지적해 주세요.
참고 사이트
공식 사이트 에 나와 있는 절차에 따라 설치를 진행합니다.
$ 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로 다른 점에서 조금 주저했기 때문에, 버전의 차이에 주의하지 않으면 안 되었습니다.
비망록적으로 쓰고 있기 때문에, 좀더 이러한 쪽이 좋다든지 내용 잘못하고 있다든가 있으면 지적해 주세요.
참고 사이트
.
├── composer.json
├── composer.lock
└── vendor
├── autoload.php
├── composer
・・・省略・・・
$ mkdir public
$ vi public/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();
$ 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.
<?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 localhost:8080
{"response":"Hello world!"}
<?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로 다른 점에서 조금 주저했기 때문에, 버전의 차이에 주의하지 않으면 안 되었습니다.
비망록적으로 쓰고 있기 때문에, 좀더 이러한 쪽이 좋다든지 내용 잘못하고 있다든가 있으면 지적해 주세요.
참고 사이트
Reference
이 문제에 관하여(Slim에서 JSON을 반환 할 때까지 메모), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ryu022304/items/10518cb1e306e213c2ac텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)