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の箇所はテストする必要がある

composerの使い方

$ curl -sS https://getcomposer.org/installer | php
$ php composer.phar –version
Composer version 2.4.1 2022-08-20 11:44:50

### composer.json
composerで管理する依存パッケージを定義するためのファイル

composer.json
L composerで管理する依存パッケージを定義するためのファイル

{
	"require": {
		"ircmaxell/random-lib": "1.0.0"
	}
}

composer.lock
L チーム内で同じバージョンを共有するための仕組み
L composer install でcomposer.lockで記したバージョンのパッケージインストール
L composer update で composer.lockに記されたバージョンを無視して、composer.jsonの最新版に更新

vendor
L composer installでインストールされたプログラムが、composer.jsonと同じ階層になるvendorフォルダ内に配置される

$ php composer.phar install
$ ls
composer.json composer.lock composer.phar vendor
$ ls vendor/
autoload.php composer ircmaxell

require_once "vendor/autoload.php";

$factory = new RandomLib\Factory;

$generator = $factory->getMediumStrengthGenerator();

echo $generator->generateString(32, "abcdef");

$ php index.php
cabdaddbdbdbbdeeffdeaeadffacefed

ここまでは基礎
composer.jsonの中に書かれている各項目が何を意味するか理解する必要がある

[負荷試験] jmeterを使ってみる

JMeterはapacheが開発しているオープンソースの負荷検証ツール
java8以上が必要

### UbuntuにJMeterをインストール
$ sudo apt install jmeter
あれ、エラーになるな…

macに入れてみる

thread groupを作成し、その後、 HTTP requestを設定する

Number of Threads(users), Ramp-up period(seconds), Loop Countを設定する
Ramp-Up期間が何秒かけてスレッドを送信するか

なるほど、考え方は多少わかった。

[PostgreSQL14.2] スキーマの作成

スキーマ(Schema)とは、1つのデータベースの中に複数設定することができる名前空間

$ psql –version
$ sudo -u postgres psql
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
———–+———-+———-+———+———+———————–
postgres | postgres | UTF8 | C.UTF-8 | C.UTF-8 |
template0 | postgres | UTF8 | C.UTF-8 | C.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | C.UTF-8 | C.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
testdb | postgres | UTF8 | C.UTF-8 | C.UTF-8 |
(4 rows)
# \c testdb
You are now connected to database “testdb” as user “postgres”.

postgres=# \dn
List of schemas
Name | Owner
——–+———-
public | postgres
(1 row)

postgres=# create schema bank1;
CREATE SCHEMA
postgres=# create schema bank2;
CREATE SCHEMA
postgres=# \dn
List of schemas
Name | Owner
——–+———-
bank1 | postgres
bank2 | postgres
public | postgres
(3 rows)

### 現在のスキーマ
postgres=# select current_schema();
current_schema
—————-
public
(1 row)

### スキーマの変更
postgres=# set search_path = bank1;
SET
postgres=# select current_schema();
current_schema
—————-
bank1
(1 row)

### スキーマを指定してテーブル作成
create table bank1.data (
id integer,
name varchar(256)
);

スキーマのテーブルができている
# \dt bank1.*
List of relations
Schema | Name | Type | Owner
——–+——+——-+———-
bank1 | data | table | postgres
(1 row)

PHPから接続する場合はスキーマ指定が必要
なるほど、スキーマの概念を理解した

ISMSとは

ISMSとは、個別の問題毎の技術対策の他に、組織のマネジメントとして、自らのリスクアセスメントにより必要なセキュリティレベルを決め、プランを持ち、資源を配分して、システムを運用すること