APIモックサーバーを作りたいなと思ってたら、PHPで楽に作れると見たので試してみる。
PHP5.4から組み込まれたビルドインWebサーバが便利らしい、今回はこれで作る!
環境
macOS 10.12.6
$ php -v
PHP 5.6.30 (cli) (built: Oct 29 2017 20:30:32)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
実装
シンプルに書く
php
<?php
$response = [
'id'=> 1,
'memo' => 'mock api memo',
];
header('Content-Typej: application/json; charset=utf-8');
echo json_encode($response);
以下コマンドでサーバー起動
$ php -S localhost:8000
GETレスポンス
{"id":1,"memo":"mock api memo"}
おおできた、本当にすげえ簡単に作れる
実装 パス対応
http://localhost:8000/memo/100
のようにmemo/100
というパスへのアクセスに対応する
php
<?php
if (!preg_match('#\A/memo/(?P<id>\d+)\z#', $_SERVER['PATH_INFO'], $matches)) {
header('HTTP/1.1 404 Not Found');
}
$response = [
'id'=> (int)$matches['id'],
'memo' => 'memo' . $matches['id'],
];
header('Content-Typej: application/json; charset=utf-8');
echo json_encode($response);
http://localhost:8000/memo/100
のレスポンス
{"id":100,"memo":"memo100"}
これまた簡単にできた、素晴らしい
試しにPOST
$ curl -X POST http://localhost:8000/memo/100
{"id":100,"memo":"memo100"}
あれ、普通にレスポンスが返ってきた
特に指定しなければ何でも受け付けるのね
Docker化
Dockerfileを作成
FROM php:5.6-alpine3.7
WORKDIR /workspace
EXPOSE 8000
CMD ["php","-S","0.0.0.0:8000"]
docker-compose.ymlを作成
version: '3'
services:
php-api-mock-sample:
build: .
volumes:
- .:/workspace/
ports:
- "8000:8000"
ファイル構成
.
├── Dockerfile
├── docker-compose.yml
└── index.php
Docker化開始
$ docker-compose build
$ docker-compose up
以下にアクセス
jsonレスポンスが返ってきたらOK