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

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

2bf280ac8fc28aa5d99de291eb8ccfbe?s=47 Endo_Hizumi
September 24, 2019

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

Replacing SSLC with Swagger

2bf280ac8fc28aa5d99de291eb8ccfbe?s=128

Endo_Hizumi

September 24, 2019
Tweet

Transcript

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

  2. SSLC? 2

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

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

  5. 5 今回の範囲 GameClient GameServer Jinro JinroResponcer.php Broadcast.php member activity_logs triggerで 書き込む

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

    発言・投票などの行動 書き込み レコード 取得 JSONで送信 6 クライアントからデータを受け取る部分の作業を 内容を話します
  7. 今回の範囲 ちなみに、逆にサーバーからリアルタイムに配信する側 https://speakerdeck.com/endohizumi/i-tried-using-server-sent-event 7

  8. 置き換えるまで経緯 • クライアント側を実装中にサーバー側に必要な機能が出てきた • サーバー側のコードを昔の記憶(3年くらい前)を元に読んでみた ◦ 考えとしては、クライアントの要求でリソースの操作を行う ◦ POSTメソッドのみ($_POSTで取得) ◦

    RequestBodyのcategoryパラメータの値で12分岐 ◦ pdoのprepareメソッドを実行の行がほとんど ◦ 一部の分岐で関数を呼んでいる ◦ 分岐の後に、SQLクエリを実行する ◦ categoryの値によってクエリの結果を取得する ◦ 返す結果がないときは、exit()で終了 8
  9. 置き換える対象 • サーバー側のコードを昔の記憶(3年くらい前)を元に読んでみた ◦ クライアントの要求でリソースの操作を行うWebAPIの様なもの ◦ MVCもなくモノシリック ◦ $_POSTで取得しているため、リスキー ◦

    仕様書もなくコードを読むしかない あれ、これ、よくないコードでは? 9
  10. 自分のモチベーションと要求を満たす一手 • ドキュメントも欲しい • 良くないコードも直したい(書き直したい) 10

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

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

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

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

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

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

  17. いざ、記述 17

  18. コード生成 18

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

    19