Upgrade to Pro — share decks privately, control downloads, hide ads and more …

SwaggerでSSLCを 置き換える / Replacing SSLC with Swagger

Endo_Hizumi
September 24, 2019

SwaggerでSSLCを 置き換える / Replacing SSLC with Swagger

Replacing SSLC with Swagger

Endo_Hizumi

September 24, 2019
Tweet

More Decks by Endo_Hizumi

Other Decks in Programming

Transcript

  1. SwaggerでSSLCを
    置き換える
    #2 クーコム Tech Meetup 代官山でLT会
    遠藤ヒズミ

    View full-size slide

  2. SSLCとは?
    Server
    Side
    Legacy
    Code
    SSLC
    3

    View full-size slide

  3. テストも仕様書もない素のPHPでかかれたコードです
    ただのレガシーコードやん
    4

    View full-size slide

  4. 5
    今回の範囲
    GameClient
    GameServer
    Jinro
    JinroResponcer.php
    Broadcast.php
    member
    activity_logs
    triggerで 書き込む
    発言・投票などの行動 書き込み
    レコード
    取得
    JSONで送信
    5
    今、開発している人狼のWebアプリの仕組みがこうなって
    います。

    View full-size slide

  5. 6
    今回の範囲
    GameClient
    GameServer
    Jinro
    JinroResponcer.php
    Broadcast.php
    member
    activity_logs
    triggerで 書き込む
    発言・投票などの行動 書き込み
    レコード
    取得
    JSONで送信
    6
    クライアントからデータを受け取る部分の作業を
    内容を話します

    View full-size slide

  6. 今回の範囲
    ちなみに、逆にサーバーからリアルタイムに配信する側
    https://speakerdeck.com/endohizumi/i-tried-using-server-sent-event
    7

    View full-size slide

  7. 置き換えるまで経緯
    ● クライアント側を実装中にサーバー側に必要な機能が出てきた
    ● サーバー側のコードを昔の記憶(3年くらい前)を元に読んでみた
    ○ 考えとしては、クライアントの要求でリソースの操作を行う
    ○ POSTメソッドのみ($_POSTで取得)
    ○ RequestBodyのcategoryパラメータの値で12分岐
    ○ pdoのprepareメソッドを実行の行がほとんど
    ○ 一部の分岐で関数を呼んでいる
    ○ 分岐の後に、SQLクエリを実行する
    ○ categoryの値によってクエリの結果を取得する
    ○ 返す結果がないときは、exit()で終了
    8

    View full-size slide

  8. 置き換える対象
    ● サーバー側のコードを昔の記憶(3年くらい前)を元に読んでみた
    ○ クライアントの要求でリソースの操作を行うWebAPIの様なもの
    ○ MVCもなくモノシリック
    ○ $_POSTで取得しているため、リスキー
    ○ 仕様書もなくコードを読むしかない
    あれ、これ、よくないコードでは?
    9

    View full-size slide

  9. 自分のモチベーションと要求を満たす一手
    ● ドキュメントも欲しい
    ● 良くないコードも直したい(書き直したい)
    10

    View full-size slide

  10. 自分のモチベーションと要求を満たす一手
    ● ドキュメントも欲しい
    ● 良くないコードも直したい(書き直したい)
    どちらも自力でやるには、モチベーションの維持が難しい
    11

    View full-size slide

  11. 自分のモチベーションと要求を満たす一手
    ● ドキュメントも欲しい
    ● 良くないコードも直したい(書き直したい)
    どちらも自力でやるには、モチベーションの維持が難しい
    ➡ そのためのSwagger
    12

    View full-size slide

  12. Swaggerがなぜ良いのか
    ● yml形式でかけて、HTML形式のドキュメントを生成できる
    ● ドキュメントがクライアントとして動く
    ● フレームワークを使ったコードが生成できる
    ➡ ドキュメントもコードも書けて、一挙両得!
    13

    View full-size slide

  13. Swaggerファイルを書くために
    1. 役割と入出力を考える
    14

    View full-size slide

  14. Swaggerファイルを書くために
    2. エンドポイントの命名
    対象とするテーブル名をもとに、エンドポイントを名付ける
    memberテーブルを操作する処理 → /members/配下に
    roomテーブルを操作する処理 → /rooms/配下に
    15

    View full-size slide

  15. Swaggerファイルを書くために
    3. 短いURLを目指す
    役職の取得APIエンドポイント
    /members/{userName}/job/
    /jobs/{userName}
    プレイヤー以外に役職つけないから /members/は長くないか?
    16

    View full-size slide

  16. いざ、記述
    17

    View full-size slide

  17. コード生成
    18

    View full-size slide

  18. 感想 使ってどうだったか
    ● 苦しんでymlを書いたのは、初めてでした(泣
    ● Swagger Editorが、VBAエディタ並みの不親切なエラーしか出して
    くれないのが、辛かった。
    ● しかし、コードを生成してくれたので、助かった。
    19

    View full-size slide