20190403のPHPに関する記事は13件です。

phpのclassとinstanceと$this

最近業務の独自のフレームワークを使った案件で$thisというのが良く出てくるので、調べたことをメモしてみます。

$thisはインスタンス自身を指す。

と簡単に言われても良くわからないので
整理して説明すると

class (クラス)

クラスとは複数の処理をまとめた設計図みたいなもの。
あくまで設計図、これがそのまま色々動いて処理を返すわけではない。

instance (インスタンス)

インスタンスとはクラスという設計図を元に作成したロボットのようなもの。
これが色々動いて処理を返してくれる。

そんでどうやってクラスを作ってインスタンスを作るのかというと

<?php

class kurasu{
    public function hyouzi(){
        echo 'ひょうじ';
    }
}

$insutansu=new kurasu;

$insutansu->hyouzi();

?>

こんな感じに書く。

kurasuという設計図にはhyouzi()という機能が設計されている。
その設計図を元に作られた$insutansuロボットは$insutansu->hyouzi();と命令を出すことで動いてくれる。
というイメージ。

$this

そして結局$thisがどういうことなのかというと
設計図を元に作られたロボット自身の事を指す。
この指すというのは、設計図に書かれているが設計図の事を指しているわけではない。

では$thisの使い所を説明していく。

<?php

class kurasu{
    public $hensu='TEST';

    public function hyouzi(){
        echo $this->hensu;
    }
}

$insutansu=new kurasu;

$insutansu->hyouzi();

?>

こんな感じで書いていく
今度は設計図には$hensuという情報と、その情報を表示する機能であるhyouzi()が設計されている。
その設計図を元にしたロボットである$insutansuは、当然設計図どおりに$hensuを覚えているので
$insutansu->hyouzi();と命令を出すとTESTと表示する。

まぁこれだけではわかりにくいので

<?php

class kurasu{
    public $hensu='TEST';

    public function hyouzi(){
        echo $this->hensu;
    }
}

$insutansu_a=new kurasu;
$insutansu_z=new kurasu;

$insutansu_a->hensu='テスト';
$insutansu_a->hyouzi();

$insutansu_z->hensu='てすと';
$insutansu_z->hyouzi();

?>

今度はこう書いてみた。
kurasuという設計図で、2つのロボット$insutansu_a$insutansu_zを作った。

それぞれに
$insutansu_aには$insutansu_a->hensu='テスト';
$insutansu_zには$insutansu_z->hensu='てすと';
$hensuの情報を変更してみた。

そして最後に2つのロボットは同じ機能であるhyouzi()を実行する。

結果はどうなるか想像出来るだろうか?

2つのロボットは同じ機能を実行したにも関わらず
$insutansu_aテストと表示し
$insutansu_zてすとと表示する
異なる結果になる。

これはhyouzi()の中の$thisによるもので
$insutansu_a$this$insutansu_a自身、
$insutansu_z$this$insutansu_z自身
を指している。
hyouzi()の中の$thisは設計図を指してはいない。

なので2つのロボットはそれぞれ自身が覚えている$hensuを表示したのだ。

編集後記

入社三日目
なんだか褒められて伸ばされている気がするが
それに比例してプレッシャーが凄い。
でも飛躍的な成長は大きな痛みを伴いやすいので
日々昨日の自分を超えるしか無いのかな、って思う。

そんな感じの事をイチローが言ってたな笑

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

php-master-changes 2019-04-02

今日は JIT 実装の最適化や修正が色々あった!
正直そこまでよく分かってないので、そのうち時間とって頑張って見ないとあかん気がする

2019-04-02

dstogov: Use Zend MM for JIT temporary buffres allocation

dstogov: Eliminate hash lookup for immutable op_arrays

dstogov: Removed checks for required object handlers

dstogov: Fixed edge cases in ZEND_ASSIGN_OP+ASSIGN_DIM and replaced specialized helpers with single one

dstogov: typo

cmb69: Fix misplacement of calling convention declaration

dstogov: Added comments

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravel ユーザー情報取得メソッド

use ~/Auth;  追加

$hoge = Auth::user();

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Selenium webdriverメソッド~PHP~

SeleniumをPHPで書くときのメソッドのまとめがほしいなと思ったので
よく使うであろう基本的なメソッドをまとめました。

メソッド一覧

指定したURLへ遷移

$driver->get("URL");

ウィンドウを閉じる

$driver->close();

全てのウィンドウを閉じる

$driver->quit();

一つもどる

$driver->navigate()->back();

一つ進む

$driver->navigate()->forward();

ブラウザを更新する

$driver->navigate()->refresh();

URLを取得する

$driver->getCurrentURL();

タイトル取得

$driver->getTitle();

スクリーンショット取得

$driver->takeScreenshot("場所とファイル名");

要素取得

$driver->findElemenet(WebDriverBy::id("ID"));
$driver->findElemenet(WebDriverBy::name("NAME"));
$driver->findElemenet(WebDriverBy::tagName("TAGNAME"));
$driver->findElemenet(WebDriverBy::cssSelector("CSSSELECTOR"));
// 複数取得
$driver->findElements(WebDriverBy::className("CLASSNAME");

要素をクリック

$driver->findElement(WebDriverBy::id("ID"))->click();

要素のテキストを取得

$driver->findElement(WebDriverBy::id("ID"))->getText();

テキスト入力

$driver->findElement(WebDriverBy::id("ID"))->sendKeys("入れたいテキスト");

入力された値をクリア

$driver->findElement(WebDriverBy::id("ID"))->clear();

属性の取得

$driver->findElement(WebDriverBy::id("ID"))->getAttribute("属性");

要素が表示されるまで待つ

$driver->wait(10)->until(
  WebDriverExpectedCondition::visibilityOfElementLocated(WebDriverBy::id("ID"))
);

また更新します。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Imagickで斜体文字を合成する備忘録

ItalicではなくObliqueらしい。
https://cottala-becco.com/italic_and_oblique/

sample.php
<?php
declare(strict_types = 1);

/*
 文字
 */
$text   = "あああああ\nいいいいい";
$x      = 0;
$y      = 100;
$o_text = new ImagickDraw();
$o_text->setFillColor( new ImagickPixel('#0000ff') );
$o_text->setTextUnderColor( new ImagickPixel("rgba(204, 204, 204, 0.5)") ); //背景色(デバッグ用)
$o_text->setTextAntialias(false);               //アンチエイリアス解除
$o_text->setFontSize(35);
$o_text->setFont('フォントファイルのパス');
$o_text->skewX(-15);                            //水平方向に傾ける
$o_text->setGravity( imagick::GRAVITY_NORTH );  //一旦中央寄せ
$o_text->annotation($x, $y, $text);             //その後、位置を微調整

/*
 背景画像合成
 */
$o_base = new Imagick('base.png');
$o_base->drawImage($o_text);
$o_base->setImageFormat('png');
$o_base->setImageCompressionQuality(0); // https://stackoverflow.com/questions/9710118/convert-multipage-pdf-to-png-and-back-linux/12046542#12046542

//ファイル保存
if (!true) {
    $o_base->writeImage('hoge.png');
}
//直接表示
else {
    header("Content-Type: image/png");
    echo $o_base;
}

/*
 メモリ解放
 */
$o_base->destroy();
$o_text->destroy();

できあがり

generate.png

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

LaravelとSchemaSpyで簡単ER図作成

ER図を描こう

あるwebサービスの運用を他のチームに引き継ぐことになりまして、
ふとデータベースまわりのドキュメントがないことに気づきました。

とまあ、そんな状況でなくともER図を描くのは面倒です。

構築したテーブルから生成

統合環境等で作成もできますが、外部キーを張っていないと自動生成できません。
運用していたwebサービスは外部キーは張っていなくてアプリケーションでリレーションをしていたので、テーブルとカラムのリストまでしか読み込めません。

かといって専用のツールで描くと、MacとWindowsで共有できないことがありますし
Excelで作成するのはちょっと。。

SchemaSpy

SchemaSpyというツールを使いました。
これだと、DBから読み取れるところは読み取って、
追加でリレーションやカラムコメントを記述することができます。
[https://schemaspy.readthedocs.io/en/latest/configuration/schemaMeta.html]

また、設定ファイルや生成したファイルなどをリポジトリ管理することもできますし、
表示もブラウザなので、MacでもWindowsでも共有できます。

ER図を出力してみる

GitHubリポジトリ
[https://github.com/mya-zaki/laravel-schemaspy-sample]

環境

  • PHP7.1
  • Laravel5.5
  • SQL Server 2017

構築

リポジトリをCloneする

DBのパスワードを編集
docker-compose.yml
schemaspy/schemaspy.properties
のを任意のパスワードに編集

コンテナをビルド

$ docker-compose up -d --build

DB作成

$ docker-compose exec sqlsrv /opt/mssql-tools/bin/sqlcmd -H localhost -U SA -Q "create database laraveldb"

パッケージをインストールする

$ docker-compose exec web composer install

.envをコピーして、編集

$ cp .env.example .env
$ docker-compose exec web php artisan key:generate
  • DB_CONNECTION=sqlsrv
  • DB_HOST=sqlsrv
  • DB_PORT=1433
  • DB_DATABASE=laraveldb
  • DB_USERNAME=SA
  • DB_PASSWORD=(DBのパスワード)

DBテーブル作成

$ docker-compose exec web php artisan migrate

SchemaSpyでデータベースドキュメント生成

準備ができたらSchemaSpyを実行します。
SQL Serverなのでドライバをschemaspy/drivers/mssql-jdbc-7.2.1.jre8.jarに置いてあります。
ドライバーはこちらから

XMLで情報追加

DBから読み取れない追加の情報についてschemaspy/schema-meta.xmlをおきます。

<?xml version="1.0" encoding="utf-8"?>
<schemaMeta xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://schemaspy.org/xsd/6/schemameta.xsd">
    <tables>
        <table name="users" comments="ユーザ情報">
            <column name="name" comments="ユーザ名"/>
        </table>
        <table name="posts">
            <column name="user_id">
                <foreignKey table="users" column="id"/>
            </column>
        </table>
    </tables>
</schemaMeta>

XMLにはusersテーブルとnameカラムにコメントを、postsテーブルに外部キーの設定が記載されています。

実行

DBの接続先、ドライバー、追加のXMLのパス、出力先はschemaspy/schemaspy.propertiesに。
ここでschemaspyコンテナを実行します。

$ docker-compose run --rm schemaspy

実行後、schemaspy/output/users.htmlをブラウザで開きます。
users_-_laraveldb_Database.png
usersテーブルとnameカラムにXMLに記述したコメントが表示されています。

Relationshipsページへいくと、
laraveldb_Database.png
usersとpostsがXMLに記載のとおりuser_idでつながっています。

これで、DBになくてもコメントやリレーションを表示できました!

XMLのリレーションの記述を自動で生成

SchemaSpy、かなり便利だと思うのですがテーブルが増えてくると
リレーションを記述したXMLを書くのが少々面倒です。

そこで、LaravelのEloquentのModelを継承したクラスのリレーションの実装からXMLを生成できるようパッケージを作りました。
mya-zaki/laravel-schemaspy-meta

以下の4つのメソッドが実装されている時にXMLに反映するようにしました。
hasOne
hasMany
belongsTo
belongsToMany

実行

$ docker-compose exec web php artisan schemaspy-meta:generate App\\Models --excludeClass=Flight --xmlFile=schemaspy/schema-meta.xml

XMLが更新されます。

<?xml version="1.0" encoding="utf-8"?>
<schemaMeta xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://schemaspy.org/xsd/6/schemameta.xsd">
    <tables>
        <table name="users" comments="ユーザ情報">
            <column name="name" comments="ユーザ名"/>
        </table>
        <table name="posts">
            <column name="user_id">
                <foreignKey table="users" column="id"/>
            </column>
        </table>
        <table name="comments">
            <column name="post_id">
                <foreignKey table="posts" column="id"/>
            </column>
            <column name="foreign_key">
                <foreignKey table="posts" column="other_key"/>
            </column>
        </table>
        <table name="password_resets">
            <column name="email">
                <foreignKey table="users" column="email"/>
            </column>
        </table>
        <table name="permission_role">
            <column name="r_id">
                <foreignKey table="roles" column="id"/>
            </column>
            <column name="p_id">
                <foreignKey table="permissions" column="id"/>
            </column>
        </table>
        <table name="my_phones">
            <column name="user_id">
                <foreignKey table="users" column="id"/>
            </column>
        </table>
        <table name="role_user">
            <column name="user_id">
                <foreignKey table="users" column="id"/>
            </column>
            <column name="role_id">
                <foreignKey table="roles" column="id"/>
            </column>
        </table>
    </tables>
</schemaMeta>

usersとpostsの記述のあとに、各テーブルのリレーションの情報が追加されました。
指定したXMLに追加分を上書きになるので、リレーションの記述の削除はされません。

もういちどschemaspyコンテナを実行します。

$ docker-compose run --rm schemaspy

Relationshipのページschemaspy/output/relationships.htmlを開くと

laraveldb Database.png
ER図が出来上がってます。

おわり

SchemaSpyとXMLの生成で完全自動化とはいきませんが
だいぶER図の作成が簡単になったと思います。

しっかり外部キーをはって構築していれば、
SSMSとかMySQL Workbenchとかが便利そうですが。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

PHPの変数って難しい

新人のとき、ほぼ新人のみで作成したWebアプリケーションに対して要望が投げられたため対応していたところ、目を疑うものを見つけてしまった。

びっくりだよ
foreach ($postData as $key => $item) {
  $arr['email'] = $this->session->userdata('email');
  //何行かの処理...
  $arr = array(
    'name' => $item['name'],
    'email' => $arr['email'],
    'text' => $item['text'],
  );
  //いろいろ処理...
}

いやこれ動くんかい。まじかい。自分が作ったとこじゃないから知らんかったぞ。
でも考えてみれば文末来るまでは変数宣言終わってませんもんね……そりゃまあうまくはいきますか……。
いやでも変数初期化しよ…?そもそも名前変えよ……?
社内でしか使われていないのでこっそり…こっそり修正します……。
こうみると新人の頃のコード本当にひどいなと……いっそ笑けるのでおっけいです(ダメ)。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

PHPのSeleniumでタブの切り替えを行う方法

PHPのSeleniumで2つのタブの切り替えを行う方法です!

$url = "https://www.google.com/"
$main = $driver->getWindowHandle();
$sub = null;

$driver->executeScript("window.open(\". $url . "\", null, null)");

foreach ( $driver->getWindowHandles() as $handle ) { 
  if ( $handle != $main ) {
    $sub = $handle;
  }
}

$driver->switchTo()->window($sub);

/* やりたい処理 */

$driver->close();

$driver->switchTo()->window($main);

解説

  • $driver->executeScript( ~~ );で新しいタブを開く
  • foreach ( ~~ )では全ウィンドウハンドルを取得して、新しいタブのウィンドウハンドルを$subに格納
  • $driver->switchTo()->window($sub);$sub(新しいタブ)に切り替え
  • $driver->close();で新しいタブを閉じる
  • $driver->switchTo()->window($main);で元のタブに切り替える
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

サーバー起動しようとしたらもう使われてるって言われたら

サーバー起動できないときの対処

エラー

$ php -S 192.168.33.10:8000
 Failed to listen on 192.168.33.10:8000 (reason: Address already in use)

phpサーバー起動しようとしたらこんなエラーが。
サーバー起動するのに失敗。理由はもう使われてるアドレスだから。

やってみたこと

$ lsof -i:8000

解説

lsofコマンドはプロセスが開いているファイルを表示する。
これでは意味がよくわからなかったが、-i:8000とすることでポート番号8000のプロセスを調べることができるらしい。

lsofコマンドが使えなかったのでインストールされているか調べる。

which -a lsof

whichは指定したコマンドのフルパスを表示する。
-aはオプションで、指定したコマンドが実行可能なパスをすべて表示する。

インストールされていなかったのでインストール

sudo yum install lsof

再度

$ lsof -i:8000

しかし、これはなにも表示されなかったので失敗。

結果

二つ目の策としてpxコマンドを使おうとして、その前に一度サーバー起動に挑戦したら起動できた。
なぜだ。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Ubuntu16.04にPHPの環境構築

環境
Ubuntu 16.04

まずは一応アップデートをしておきます。

apt-get update

sudoがなければインストールをします。

apt-get install -y sudo

Apache2をインストールします。(バージョン確認)

sudo apt-get install apache2
apache2 -v

PHP7をインストールします。

sudo add-apt-repository ppa:ondrej/php
/* もし、add-apt-repositoryがなければ
sudo apt-get install software-properties-common
sudo apt-get update
*/
sudo apt-get install php7.0 php7.0-mysql libapache2-mod-php7.0 php7.0-mcrypt php7.0-mbstring php7.0-xml
php -v

これでPHPのインストールは完了ですが、Composerも入れておくと便利です。

Composerについては別の記事で。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Laravel】バージョン確認コマンド

Laravekのバージョンを確認するコマンドの備忘録です。

php artisan --version

or

php artisan -V
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Q. apacheのバーチャルホスト毎の設定でpost_max_size変えたい

A. apacheのconfか、.htaccessで出来る。

https://www.php.net/manual/ja/ini.list.php

post_max_size "8M" PHP_INI_PERDIR

https://www.atmarkit.co.jp/ait/articles/1112/21/news127.html

PHP_INI_PERDIRはディレクトリごとの設定変更が可能なディレクティブです。.htaccessによる変更もできます。php.iniファイルでの設定ももちろん可能です。しかし、PHPプログラムからの変更はできません。

--- apache設定の追加例

// PHP_Value PHP設定ディレクティブ1 設定値1
// PHP_Value PHP設定ディレクティブ2 設定値2

PHP_Value post_max_size 512M
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

WebAPI

はじめに

限られた時間の中で今後WebAPIを使用していくための入門となるよう、「正確」よりも「わかりやすさ」を心がけてみました。


APIとは

Application Programming Interfaceの略。ソフトウェアからOSの機能を利用するための仕様またはインターフェースの総称で、アプリケーションの開発を容易にするためのソフトウェア資源のことをいう。「API」の重要な役割は、サービス提供者が公式に仕様を定義・管理している操作方法(インターフェース)を提供することである。
by 大塚商会 IT用語辞典
https://www.otsuka-shokai.co.jp/words/api.html

APIとは「Application Programming Interface(アプリケーション・プログラミング・インターフェイス)」の略語であり、「ある1つの機能に特化したプログラムで共有可能なもの」や「ソフトウェアの機能を共有する仕組み」のことです。よく使う機能がAPIとして用意されていれば、わざわざ一からプログラムを組む必要はありません。必要に応じてAPIを利用し、効率的に開発を進められます。


c++でのWINAPI使用例

test.cpp
#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine,int nCmdShow){
    HWND hwnd = CreateWindow(TEXT("TEST") , TEXT("これはテストウインドウです。") ,WS_CAPTION ,100 , 100 , 200 , 200 , NULL , NULL ,hInstance , NULL);
    if (hwnd == NULL) return 0;
    ShowWindow(hwnd , SW_SHOW);

    MessageBox(NULL , TEXT("これはテストです。"), TEXT("TEST1"),MB_OK);
    return 0;
}

Windows OSの持つ機能が、「CreateWindow」を使用するだけで簡単に自社システム等で使用できます。
Windowは普段当たり前に使用しているでしょうが、移動やサイズ変更できたり、アクティブウインドウって概念があったり、実は複雑。自前で実装するのはとても大変。
それを解決してくれるのだよAPIは。


WebAPIとは

ネットワーク越しに、APIを提供することで、自システムはもとより、他社の作成した機能を自システムに取り込んだり、他社に自システムの機能を提供することが可能に!

従来は、APIといえばOSがアプリケーションソフト向けに提供していた機能を指していたが、現在はWebサービスがアプリ開発者向けに公開している機能を「Web API」と呼んでいるほか、気象情報、グルメ紹介、テレビ番組表、交通データ、観光情報などのさまざまなAPIがある。APIを利用すると、よく使う機能をAPIから呼び出すだけで使えるため、ゼロからプログラミングする必要がなくなり、ソフトウェアの開発を省力化できる。

公開されているWeb APIでは、「Facebook」「Twitter」「YouTube」「Googleマップ」などが有名で、スマートフォン向けのサービスやアプリ開発には欠かせない。
by 大塚商会 IT用語辞典


WebAPI特徴

  • サーバで提供している(or されている)機能をhttpでネットワーク越しに使用する
  • 決められたインターフェース、つまりパラメータやURL等で動作
  • レスポンスは昔はXML、今はJSONが主流
  • Webでajaxでよく利用される
  • スマホアプリからの利用もあります

WebAPIの例

http://zipcloud.ibsnet.co.jp/doc/api

郵便番号検索API
郵便番号検索APIとは
郵便番号検索APIは、日本郵便が公開している郵便番号データを検索する機能をRESTで提供しています。


郵便番号検索API実行例 正常

http://zipcloud.ibsnet.co.jp/api/search?zipcode=731-3174


{
  "message": null,
  "results": [
    {
      "address1": "広島県",
      "address2": "広島市安佐南区",
      "address3": "大塚西町",
      "kana1": "ヒロシマケン",
      "kana2": "ヒロシマシアサミナミク",
      "kana3": "オオヅカニシマチ",
      "prefcode": "34",
      "zipcode": "7313174"
    }
  ],
  "status": 200
}

郵便番号検索API実行例 エラー

http://zipcloud.ibsnet.co.jp/api/search?zipcode=

{
  "message": "必須パラメータが指定されていません。",
  "results": null,
  "status": 400
}

http://zipcloud.ibsnet.co.jp/api/search?zipcode=9999

{
  "message": "パラメータ「郵便番号」の桁数が不正です。",
  "results": null,
  "status": 400
}

HTTP Status Code

400 入力パラメータエラー by 郵便番号検索API

一般的にWebAPIではHTTP Status Codeを返却
200:成功
400:リクエストが不正
404:Not Found
500:サーバエラー


HTTP Status Code

100番台 情報
200番台 成功
300番台 リダイレクト
400番台 クライアント起因エラー(未入力等)
500番台 サーバ側エラー

先輩に学ぶ HTTP Status Code
https://gist.github.com/rosylilly/3401612


HTTPメソッドについて

GET
リソースの取得
POST
リソースの新規登録
PUT
既存リソースの更新
DELETE
リソースの削除


RESTとは

REpresentational State Transferの略で、分散型システムにおける複数のソフトウェアを連携させるのに適した設計原則の集合、考え方のこと。Roy Fieldingが2000年に提唱した。

RESTの原則
主に以下の4つの原則から成る。
* アドレス可能性(Addressability)
提供する情報がURIを通して表現できること。全ての情報はURIで表現される一意なアドレスを持っていること。
* ステートレス性(Stateless)
HTTPをベースにしたステートレスなクライアント/サーバプロトコルであること。セッション等の状態管理はせず、やり取りされる情報はそれ自体で完結して解釈できること。
* 接続性(Connectability)
情報の内部に、別の情報や(その情報の別の)状態へのリンクを含めることができること。
* 統一インターフェース(Uniform Interface)
情報の操作(取得、作成、更新、削除)は全てHTTPメソッド(GET、POST、PUT、DELETE)を利用すること。


Swagger Editor

https://editor.swagger.io/
WebAPIの定義を作成可能なオンラインエディタ

sample.yaml 抜粋
swagger: "2.0"
info:
  version: "1.0.0"
  title: "Sample"
basePath: "/v2"
tags:
- name: "user"
  description: "Operations about user"
schemes:
- "https"
- "http"
paths:
  /user:
    post:
      tags:
      - "user"
      summary: "作成 user"
      description: "This can only be done by the logged in user."
      operationId: "createUser"
      produces:
      - "application/json"
      parameters:
      - in: "body"
        name: "body"
        description: "Created user object"
        required: true
        schema:
          $ref: "#/definitions/User"
      responses:
        default:
          description: "successful operation"


自動生成Interface

UserApiInterface.php 抜粋
/**
 * UserApiInterface Interface Doc Comment
 */
interface UserApiInterface{

    public function createUser(User $body, &$responseCode, array &$responseHeaders);

    public function deleteUser($username, &$responseCode, array &$responseHeaders);

    public function getUserByName($username, &$responseCode, array &$responseHeaders);

    public function updateUser($username, User $body, &$responseCode, array &$responseHeaders);
}



SwaggerとAmazon API Gateway

API GatewayからSwagger定義をインポート、エクスポート可能

Export as Swagger + API Gateway Extentions
swaggerの定義ファイル+API Gateway独自の認証等の各種設定

AWS Amazon API Gateway
https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/welcome.html

Amazon API Gateway は、規模に関係なく、独自の REST および WebSocket API を作成、公開、保守、モニタリング、保護できる AWS のサービスです。AWS または他のウェブサービス、AWS クラウドに保存されているデータにアクセスする、堅牢かつ安全でスケーラブルな API を作成できます。独自のクライアントアプリケーション (アプリ) で使用するための API を作成できます。または、API をサードパーティーのアプリ開発者に対して使用可能にできます。
by AWS ドキュメント » Amazon API Gateway » 開発者ガイド » Amazon API Gateway とは


API Gatewayからのエクスポート

https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/api-gateway-export-api.html
API Gateway コンソールを使用した REST API のエクスポート

実習


参考文献など

Web API: The Good Parts 大型本 – 2014/11/21
水野 貴明 (著)
https://www.amazon.co.jp/Web-API-Parts-%E6%B0%B4%E9%87%8E-%E8%B2%B4%E6%98%8E/dp/4873116864

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む