Slide 1

Slide 1 text

はじめてのAPI開発
 アーキテクチャ設計
 三海 純(ミカイジュン)


Slide 2

Slide 2 text

自己紹介
 ● 三海純(ミカイ ジュン) ● 現在フリーランスエンジニア ○ Next.jsの新規開発・設計 + Laravel ○ Python API新規開発・設計 ● 趣味 ○ アニメ(BanG Dream!・ぼざろ 等) ○ ネット麻雀(雀魂・雀豪)

Slide 3

Slide 3 text

キャリア
 ● 2020/06 - 2022/02: 正社員(受託企業) ○ Vue.js/Nuxt.jsをメイン ● 2022/03 - 2023/09: 正社員(自社開発) ○ バックエンドはPython / Nest.js(Node.js) ○ フロントエンドはReact.jsとNext.js ● 2023/10 - : フリーランス(自社開発) ○ Next.jsの設計とバックエンド実装を担当 ○ Python APIの新規開発・設計

Slide 4

Slide 4 text

アーキテクチャ設計
 っていうとどんな
 イメージですか?


Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

はっきり言いますね


Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

こんな自分が
 API開発の
 0→1を行うことに
 


Slide 9

Slide 9 text

無闇に開発するのも
 あれなので
 それっぽく設計した
 


Slide 10

Slide 10 text

・バックエンドはAPIのみ開発。俗にいうマ イクロサービスというやつです
 
 ・リリースしたら終わり!という訳ではない (はず)
 
 前提条件


Slide 11

Slide 11 text

っdd
 補足: APIとは(get)
 データ欲しいです データです

Slide 12

Slide 12 text

っdd
 補足: APIとは(post・put)
 保存したいです 保存成功しました

Slide 13

Slide 13 text

今回採用したのが


Slide 14

Slide 14 text

3層アーキテクチャ
 引用元:https://qiita.com/os1ma/items/7a229585ebdd8b7d86c2

Slide 15

Slide 15 text

3層アーキテクチャとは?
 ● プレゼンテーション層
 ○ ユーザーインターフェースを担当します。ユーザーからの入力を受 け取り、処理結果を表示します。
 ● ビジネスロジック層
 ○ ビジネスロジックを担当します。データの処理や計算を行い、プレゼ ンテーション層とデータアクセス層の間の橋渡し役を務めます。
 ● データアクセス層
 ○ データベースへのアクセスを担当します。アプリケーション層からの 要求を受け、データベースからデータを取得したり、データを更新し たりします。


Slide 16

Slide 16 text

専 門 用 語 時 間

Slide 17

Slide 17 text

っdd
 簡単にしてみました
 窓口 (プレゼンテーション層) 収納Box (データアクセス層) 加工職人 (ビジネスロジック層) 使用ユーザー 〇〇のデータください 〇〇のデータです データ送受信

Slide 18

Slide 18 text

ディレクトリ構成はこうなる
 root ├── controller(窓口) ├── services(加工職人) └── repositories(収納Box)

Slide 19

Slide 19 text

っdd
 赤枠部分が3層アーキテクチャ
 窓口 (プレゼンテーション層) 収納Box (データアクセス層) 加工職人 (ビジネスロジック層) 使用ユーザー 〇〇のデータください 〇〇のデータです データ送受信

Slide 20

Slide 20 text

っdd
 窓口の役割
 窓口 (プレゼンテーション層) 収納Box (データアクセス層) 加工職人 (ビジネスロジック層) 使用ユーザー 〇〇のデータください 〇〇のデータです データ送受信

Slide 21

Slide 21 text

窓口(プレゼンテーション層)
 ● ユーザーからの入力を受け取り、処理結果を表示する
 
 ● 収納Box(データアクセス層)に以下のような命令をする
 ○ データください
 ○ データを更新してください
 ○ データを削除してください
 
 ● 逆にいうとそれ以外のロジックはここでは行わない


Slide 22

Slide 22 text

っdd
 収納Boxの役割
 窓口 (プレゼンテーション層) 収納Box (データアクセス層) 加工職人 (ビジネスロジック層) 使用ユーザー 〇〇のデータください 〇〇のデータです データ送受信

Slide 23

Slide 23 text

収納Box(データアクセス層)
 ● データベース(DB)から取得したり、保存したりする
 ○ MySQL
 ○ Firebase など
 
 ● 逆にいうとデータの加工やエラーハンドリングなどは行わな い
 
 ● 理論上、DB移行を行う時はこの層しか触らない
 ○ Firebase→MySQL移行など


Slide 24

Slide 24 text

っdd
 加工職人の役割
 窓口 (プレゼンテーション層) 収納Box (データアクセス層) 加工職人 (ビジネスロジック層) 使用ユーザー 〇〇のデータください 〇〇のデータです データ送受信

Slide 25

Slide 25 text

加工職人(ビジネスロジック層)
 ● 以下のこと「以外」は全て担当
 ○ 窓口(プレゼンテーション層)
 ○ 収納Box(データアクセス層)
 
 ● 例えばデータの加工やエラーハンドリングなど
 
 ● ロジックは全部加工職人に任せるので記述量がデカくなり がち


Slide 26

Slide 26 text

設計の参考に
 なれば幸いです


Slide 27

Slide 27 text

ご清聴ありがとうござ います!