OpenAPI generatorとは?

OpenAPIはREST APIの定義を記述する規格
APIサーバがどのような挙動をするかを記した設計書
従来はSwagger Specificationと呼ばれた

### メリット
・決まったフォーマットで規定できる
・そのままAPIドキュメントになる
・API定義からサーバ・クライアントのコード生成ができる

サンプル
https://raw.githubusercontent.com/OAI/OpenAPI-Specification/master/examples/v3.0/petstore.yaml

### OpenAPI Generator
何らかの構造を定義して、定められた形式で定義
どのエンドポイントがどんなリクエストを受け付けてどんなレスポンスを返すのか

### OpenAPI
info, servers, paths, tags/externalDocs, components

Swagger Toolなどで生成する

### OpenAPI Generatorのはじめ方
openapi-generator generate -i ./openapi.yml -g php -o./php-api-client

### OpenAPIを使ってみる
openapi.yaml

openapi: "3.0.3"

info:
  title: "Sample API"
  version: "1.0.0"

paths:
  "/message":
    get:
      summary: "Sample API get operation"
      descrption: "Sample API get operation"
      responses:
        "200":
          description: "Success operation"
          content:
            application/json:
              schema:
                type: string
                example: "Hello World !"

$ sudo docker run –rm -v “${PWD}:/home/vagrant/dev/test” openapitools/openapi-generator-cli generate \
-i /home/vagrant/dev/test/openapi.yaml \
-g php-laravel \
-o /home/vagrant/dev/test/php-laravel

-attribute paths.’/message'(get).descrption is unexpected

ん? どういうことだ?
yamlファイルを作成してから、openapiでコードを生成する?
いまいち流れがわからん?

OpenAPI Generator から コードを作成することができるのね。

PHPの正規表現 ○を含む AND △を含む

$str = "0aZ";
if(preg_match("/^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=\S+$).*$/", $str)){
	echo "マッチします。";
} else {
	echo "マッチしません。";
}

\S+$は半角を含まないという意味かな
なるほど、理解に時間がかかったわ

PHPの正規表現

test.php

$str = "123-4567";
if(preg_match("/^[0-9]{3}-[0-9]{4}$/", $str)){
	echo "マッチします。";
} else {
	echo "マッチしません。";
}

正規表現 半角文字

/^[\x21-\x7e]*$/

うーん 難しいな

composer.jsonのrepositories

	"repositories": {
		"my/repo": {
			"type": "vcs",
			"url": "https://github.com/my/repo"
		}
	}

RepoProject/composer.json

{
	"name": "sample-vendor/ralabel",
	"description": "Composerサンプルプロジェクト",
	"license": "MIT",
	"autoload": {
		"psr-0": {
			"Ralabel\\":"src/"
		}
	}
}

DummyProject/composer.json

{
	"repositories": [
		{
			"type": "vcs",
			"url" : "/home/vagrant/dev/composer/RepoProject/"
		}
	],
	"require": {
		"sample-vendor/ralabel": "dev-master"
	}
}

composer.jsonのscriptsはコマンドだけで実行できる

ライブラリ側でcomposer.jsonを作成して、利用側のcomposer.jsonでrepositoriesで指定してパーツを利用するのか、、
なるほど、repositoriesの使い方を理解した。

composer.jsonの中身

composer.jsonのバージョン指定方法
-dev: 開発中
-rc: 公開前
-stable: 安定版

requireは必ず必要なパッケージ
require-devは開発用だけで必要なパッケージ
本番環境では、composer install -no-devとしてインストール

### オートロード機能
オートロード機能は自動でclass fileを読み込む機能
psr-4: 名前空間とcomposer.jsonの存在するディレクトリからの相対パスの対応付け

	"autoload": {
		"psr-4" : {
			"App\\": "app/"
		}
	}

autoloadセクションを編集した場合、下記コマンドを実行して変更を反映
$ composer dump-autoload

### バージョン指定

	"config": {
		"platform": {
			"php": "5.5.9"
		}
	}

$ php composer.phar suggests
インストールしたパッケージと共に利用すると良い関連パッケージ

repositories: カスタムパッケージのリポジトリを設定
Custom package repositories to use.By default Composer only uses the packagist repository. By specifying repositories you can get packages from elsewhere.
vcs: The version control system repository can fetch packages from git, svn, fossil and hg repositories.

Repositories are not resolved recursively. You can only add them to your main composer.json. Repository declarations of dependencies’ composer.jsons are ignored.
prefer-stable:When this is enabled, Composer will prefer more stable packages over unstable ones when finding compatible stable packages is possible. If you require a dev version or only alphas are available for a package, those will still be selected granted that the minimum-stability allows for it.

repositoriesの箇所はテストする必要がある