Slide 1

Slide 1 text

2023年度エンジニア定例 フレームワーク回バックエンド

Slide 2

Slide 2 text

バックエンドパートでは 主にAPIについてお話しま す

Slide 3

Slide 3 text

話す内容 ・APIとは? ・APIの種類 ・REST APIとREST原則 ・リクエストとレスポンス ・HTTPメソッド ・ヘッダー ・URI ・ペイロード ・HTTPステータスコード

Slide 4

Slide 4 text

APIってなに?

Slide 5

Slide 5 text

沢山の言葉が出てきます アプリケーションプログラミングインタフェース(API、英: Application Programming Interface)[注釈 1]とは、広義では ソフトウェアコンポーネント同士が互いに情報をやりとりするのに使用するインタフェースの仕様である。 APIには、サブルーチン、データ構造、オブジェクトクラス、変数などの仕様が含まれる。APIには様々な形態があり、POSIX のような国際標準規格、マイクロソフトのWindows APIのようなベンダーによる文書、プログラミング言語の標準ライブラ リ(例えば、C++のStandard Template LibraryやJava API(英語版)など)がある。 商業的に使われる狭義では、各種システムやサービス(ハードウェア、OS、ミドルウェアおよびWebサービス等)を利用す るアプリケーションソフトウェア (Application) を開発・プログラミング (Programming) するためのインタフェース (Interface) である[1][2][3][4][5]。こちらの意味では、システムやサービスから直接提供されないもの、例えば言語の標準ラ イブラリは含まない。 APIはアプリケーションバイナリインタフェース (ABI) とは異なる。APIはソースコードベースだが、ABIはバイナリインタフ ェースである。例えば、POSIXはAPIだが、Linux Standard Base (LSB) はABIである[6](LSBはいろいろな規定の集合なの で、正確には「LSBには、ABIにまで踏み込んでいる部分もある」)。 引用: https://ja.wikipedia.org/wiki/%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83% A7%E3%83%B3%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%82% A4%E3%83%B3%E3%82%BF%E3%83%95%E3%82%A7%E3%83%BC%E3%82%B9

Slide 6

Slide 6 text

むずかしい

Slide 7

Slide 7 text

沢山の言葉が出てきます APIってわかりやすく 言うと何?

Slide 8

Slide 8 text

ソフトウェアの一部機能を公開/共有 出来る仕組みのこと 引用:https://www.itmanage.co.jp/column/application-programming-interface/

Slide 9

Slide 9 text

APIを使うと何がうれし い?

Slide 10

Slide 10 text

最新情報の取得が容易になる ⇒情報の確認や更新の手間が省ける 開発の効率化に繋がる ⇒機能の開発時間を大幅に短縮できる

Slide 11

Slide 11 text

APIにはどんな種類があ る?

Slide 12

Slide 12 text

主に2種類 WebAPI(今回説明するのはこちら) ⇒Webサービス機能の一部として提供されているAPI OSが提供するAPI ⇒OS上でプログラミングを行うために用意されたAPI 引⽤︓https://cloudapi.kddi-web.com/magazine/api-types-and-protocols

Slide 13

Slide 13 text

今回はWebAPIについて 説明

Slide 14

Slide 14 text

多くのWebAPIはREST原則に基づいている REST原則に基づいたものをREST APIと呼ぶ

Slide 15

Slide 15 text

REST原則って何?

Slide 16

Slide 16 text

原則1︓ステートレスなクライアント/サーバプロトコル HTTPメッセージの全てがリクエストを理解するための必要な情報を含んでいることから、HTTP通信を⾏うクライアントもサ ーバもメッセージ間におけるセッションの状態を記憶している必要がありません。 ※ ステートレスと表現していますが、実 際には Cookie などを使⽤しセッション状態を管理しています。 原則2︓リソースを⼀意なURIにより識別される RESTfulなシステムでは全てのリソース(情報)はURI(Uniform Resource Identifier)で表現される ユニークなアドレスを持ちます。 原則3︓HTTPメソッドで操作⽅法を表現した統⼀されたインターフェース リソースを操作するメソッドは、HTTPで定義され ている "GET"、"POST"、"PUT"、"DELETE" などを使⽤します。つまり、情報を操作する命令体系があらかじめ定義されて います。 原則4︓アプリケーション情報と状態遷移の両⽅を扱える ハイパーメディアの使⽤リソースを様々な形式(HTML、XML、 JSON、バイナリ)で表現できるようにします。また、関連する データはハイパーメディア(リンク)としてデータに含め ることができます。 引⽤元︓https://www.infraexpert.com/study/sdn09.html

Slide 17

Slide 17 text

ちょっとむずかしい

Slide 18

Slide 18 text

簡単にすると... 原則1︓サーバーとクライアントがデータ交換をする時に、お互いのセッション状態は記憶してなくてもいいよ 原則2︓所望のデータを取りたい際に、APIを叩くときのおまじないは⼀意に定まるよ 原則3︓APIを叩く際には "GET"、"POST"、"PUT"、"DELETE" を使ってユーザが何をしたいのかをわかりやすくするよ 原則4︓アプリケーション情報と状態遷移の両⽅を扱える ハイパーメディアの使⽤リソースを様々な形式(HTML、XML、 JSON、バイナリ)で表現できるようにします。また、関連する データはハイパーメディア(リンク)としてデータに含め ることができます

Slide 19

Slide 19 text

APIの実例を⾒てみる 実例として、zipcloudの郵便番号API検索を利⽤︓https://zipcloud.ibsnet.co.jp/doc/api

Slide 20

Slide 20 text

郵便番号検索のAPI $ curl “https://zipcloud.ibsnet.co.jp/api/search?zipcode=7830060” { "message": null, "results": [ { "address1": "⾼知県", "address2": "南国市", "address3": "蛍が丘", "kana1": "コウチケン", "kana2": "ナンコクシ", "kana3": "ホタルガオカ", "prefcode": "39", "zipcode": "7830060" } ], "status": 200 }

Slide 21

Slide 21 text

何が起きているの︖

Slide 22

Slide 22 text

APIの概念について例⽰

Slide 23

Slide 23 text

ファストフードの注⽂に例えると

Slide 24

Slide 24 text

②商品 ①注⽂ お客 店員 ⾏動︓購⼊ 注⽂︓ハンバーガーセット ⾷べる場所︓店内

Slide 25

Slide 25 text

所定の注⽂をすると、 きちんと商品が貰える

Slide 26

Slide 26 text

APIも同じ

Slide 27

Slide 27 text

所定の注⽂(リクエスト)をすると、 きちんと商品(レスポンス)が貰える

Slide 28

Slide 28 text

レスポンス リクエスト エンドポイント 通信元 URI プロトコル︓https ドメイン︓zipcloud.ibsnet.co.jp リソースパス︓api/search パラメータ︓zipcode=7830060 メソッド︓GET HTTPステータスコード︓200 ヘッダー︓受付⽇時、コンテンツタイプなど ヘッダー︓通信元の情報など ペイロード︓住所や読み⽅など (ペイロード︓詳細な情報)

Slide 29

Slide 29 text

知らない⾔葉が沢⼭ある

Slide 30

Slide 30 text

ひとつひとつ⾒ていく

Slide 31

Slide 31 text

レスポンス リクエスト エンドポイント 通信元 URI プロトコル︓https ドメイン︓zipcloud.ibsnet.co.jp リソースパス︓api/search パラメータ︓zipcode=7830060 メソッド︓GET HTTPレスポンス︓200 ヘッダー︓受付⽇時、コンテンツタイプなど ヘッダー︓通信元の情報など ペイロード︓住所や読み⽅など (ペイロード︓詳細な情報) URI プロトコル︓https ドメイン︓zipcloud.ibsnet.co.jp リソースパス︓api/search パラメータ︓zipcode=7830060 HTTPレスポンス︓200 ヘッダー︓受付⽇時、コンテンツタイプなど ヘッダー︓通信元の情報など ペイロード︓住所や読み⽅など (ペイロード︓詳細な情報) URI プロトコル︓https ドメイン︓zipcloud.ibsnet.co.jp リソースパス︓api/search パラメータ︓zipcode=7830060 HTTPステータスコード︓200 ヘッダー︓受付⽇時、コンテンツタイプなど ヘッダー︓通信元の情報など ペイロード︓住所や読み⽅など (ペイロード︓詳細な情報)

Slide 32

Slide 32 text

メソッド(HTTPメソッド) とは︖

Slide 33

Slide 33 text

リクエストを⾏う際に 「どのような操作を⾏いたいか」 を決定するために使⽤します

Slide 34

Slide 34 text

主に4つのメソッドが使われている HTTPメソッド 機能 GET リクエスト先の情報(リソース)を取得する際 に使⽤する POST 新しいリソース情報を送り込む PUT リソース情報を新しい情報で置き換える DELETE リソース情報を削除する

Slide 35

Slide 35 text

レスポンス リクエスト エンドポイント 通信元 URI プロトコル︓https ドメイン︓zipcloud.ibsnet.co.jp リソースパス︓api/search パラメータ︓zipcode=7830060 メソッド︓GET ヘッダー︓受付⽇時、コンテンツタイプなど ヘッダー︓通信元の情報など ペイロード︓住所や読み⽅など (ペイロード︓詳細な情報) URI プロトコル︓https ドメイン︓zipcloud.ibsnet.co.jp リソースパス︓api/search パラメータ︓zipcode=7830060 ヘッダー︓受付⽇時、コンテンツタイプなど ヘッダー︓通信元の情報など ペイロード︓住所や読み⽅など (ペイロード︓詳細な情報) URI プロトコル︓https ドメイン︓zipcloud.ibsnet.co.jp リソースパス︓api/search パラメータ︓zipcode=7830060 ヘッダー︓受付⽇時、コンテンツタイプなど ヘッダー︓通信元の情報など ペイロード︓住所や読み⽅など (ペイロード︓詳細な情報) HTTPステータスコード︓200

Slide 36

Slide 36 text

レスポンス リクエスト エンドポイント 通信元 URI プロトコル︓https ドメイン︓zipcloud.ibsnet.co.jp リソースパス︓api/search パラメータ︓zipcode=7830060 メソッド︓GET ヘッダー︓受付⽇時、コンテンツタイプなど ヘッダー︓通信元の情報など ペイロード︓住所や読み⽅など (ペイロード︓詳細な情報) URI プロトコル︓https ドメイン︓zipcloud.ibsnet.co.jp リソースパス︓api/search パラメータ︓zipcode=7830060 ヘッダー︓受付⽇時、コンテンツタイプなど ヘッダー︓通信元の情報など ペイロード︓住所や読み⽅など (ペイロード︓詳細な情報) URI プロトコル︓https ドメイン︓zipcloud.ibsnet.co.jp リソースパス︓api/search パラメータ︓zipcode=7830060 ヘッダー︓受付⽇時、コンテンツタイプなど ヘッダー︓通信元の情報など ペイロード︓住所や読み⽅など (ペイロード︓詳細な情報) HTTPステータスコード︓200

Slide 37

Slide 37 text

ヘッダーとは︖

Slide 38

Slide 38 text

クライアントやサーバーが HTTPリクエストやレスポンスで 追加情報を渡すことができる

Slide 39

Slide 39 text

代表的なヘッダー情報 ・サーバーとやりとりするための認証情報 ・やりとりした⽇時 ・クッキー ・などなど...

Slide 40

Slide 40 text

郵便番号検索のAPIのレスポンスヘッダ $ curl --head "https://zipcloud.ibsnet.co.jp/api/search?zipcode=7830060" HTTP/2 200 access-control-allow-origin: * content-type: text/plain;charset=utf-8 x-cloud-trace-context: c948f2b622f8591dae93a05b17ce65c2 content-length: 290 date: Fri, 14 Jul 2023 04:41:35 GMT server: Google Frontend

Slide 41

Slide 41 text

URIとは︖

Slide 42

Slide 42 text

名前または場所を識別する書き⽅のルールの総称 (URN U URL) = URI

Slide 43

Slide 43 text

レスポンス リクエスト エンドポイント 通信元 URI プロトコル︓https ドメイン︓zipcloud.ibsnet.co.jp リソースパス︓api/search パラメータ︓zipcode=7830060 メソッド︓GET ヘッダー︓受付⽇時、コンテンツタイプなど ヘッダー︓通信元の情報など ペイロード︓住所や読み⽅など (ペイロード︓詳細な情報) URI プロトコル︓https ドメイン︓zipcloud.ibsnet.co.jp リソースパス︓api/search パラメータ︓zipcode=7830060 ヘッダー︓受付⽇時、コンテンツタイプなど ヘッダー︓通信元の情報など ペイロード︓住所や読み⽅など (ペイロード︓詳細な情報) URI プロトコル︓https ドメイン︓zipcloud.ibsnet.co.jp リソースパス︓api/search パラメータ︓zipcode=7830060 ヘッダー︓受付⽇時、コンテンツタイプなど ヘッダー︓通信元の情報など ペイロード︓住所や読み⽅など (ペイロード︓詳細な情報) HTTPステータスコード︓200

Slide 44

Slide 44 text

ペイロードとは︖

Slide 45

Slide 45 text

パケット通信においてパケットに含まれるヘッダやト レーラなどの付加的情報を除いた、データ本体のこと

Slide 46

Slide 46 text

<リクエスト> POSTやPUTなどのHTTPメソッドを使う場合、 ここに各種情報を⼊れて叩く <レスポンス> 欲しいデータがこの中に⼊っているよ

Slide 47

Slide 47 text

レスポンス リクエスト エンドポイント 通信元 URI プロトコル︓https ドメイン︓zipcloud.ibsnet.co.jp リソースパス︓api/search パラメータ︓zipcode=7830060 メソッド︓GET HTTPレスポンス︓200 ヘッダー︓受付⽇時、コンテンツタイプなど ヘッダー︓通信元の情報など ペイロード︓住所や読み⽅など (ペイロード︓詳細な情報) URI プロトコル︓https ドメイン︓zipcloud.ibsnet.co.jp リソースパス︓api/search パラメータ︓zipcode=7830060 HTTPレスポンス︓200 ヘッダー︓受付⽇時、コンテンツタイプなど ヘッダー︓通信元の情報など ペイロード︓住所や読み⽅など (ペイロード︓詳細な情報) URI プロトコル︓https ドメイン︓zipcloud.ibsnet.co.jp リソースパス︓api/search パラメータ︓zipcode=7830060 HTTPステータスコード︓ 200 ヘッダー︓受付⽇時、コンテンツタイプなど ヘッダー︓通信元の情報など ペイロード︓住所や読み⽅など (ペイロード︓詳細な情報)

Slide 48

Slide 48 text

HTTPステータスコードとは︖

Slide 49

Slide 49 text

レスポンスに表⽰される3桁の番号のこと クライアントのWebブラウザとサーバ間ではHTTPリクエストに対し てレスポンスを返す

Slide 50

Slide 50 text

ステータスコード 状態 説明 有名なステータスコード 100番台 正常 クライアントからのリクエスト を受け⼊れ可能で、継続して処 理されている状態 100 Continue リクエスト継続可能 200番台 正常 クライアントからリクエストが サーバに送られ理解されて受理 された状態です。 200 OK リクエストが正常に処理できた 300番台 正常 リクエストを完了させるために 追加的な処理が必要です。 300 Multiple Choice リクエストに対して 複数のレスポンスがあることを示す 400番台 エラー クライアント(ユーザ)側で操 作や⼊⼒に不備があった際に出 てしまうエラー 404 Not Found Webページが見つからない 500番台 エラー サーバ側で問題が⽣じていてい る際に出てしまうエラー 500 Internal Server Error 何らかのサーバ 内で起きたエラー

Slide 51

Slide 51 text

レスポンス リクエスト エンドポイント 通信元 URI プロトコル︓https ドメイン︓zipcloud.ibsnet.co.jp リソースパス︓api/search パラメータ︓zipcode=7830060 メソッド︓GET HTTPレスポンス︓200 ヘッダー︓受付⽇時、コンテンツタイプなど ヘッダー︓通信元の情報など ペイロード︓住所や読み⽅など (ペイロード︓詳細な情報) URI プロトコル︓https ドメイン︓zipcloud.ibsnet.co.jp リソースパス︓api/search パラメータ︓zipcode=7830060 HTTPレスポンス︓200 ヘッダー︓受付⽇時、コンテンツタイプなど ヘッダー︓通信元の情報など ペイロード︓住所や読み⽅など (ペイロード︓詳細な情報) URI プロトコル︓https ドメイン︓zipcloud.ibsnet.co.jp リソースパス︓api/search パラメータ︓zipcode=7830060 HTTPステータスコード︓ 200 ヘッダー︓受付⽇時、コンテンツタイプなど ヘッダー︓通信元の情報など ペイロード︓住所や読み⽅など (ペイロード︓詳細な情報)

Slide 52

Slide 52 text

パラメータとは

Slide 53

Slide 53 text

APIが処理に使うための情報 主に3種類 パスパラメータ ⇒URLドメイン以下のパス 例)https://support.nifty.com/mypage/ クエリパラメータ ⇒URLの”?”以降 例)https://zipcloud.ibsnet.co.jp/api/search?zipcode=7830060 ペイロード ⇒HTTPリクエストの際に送るデータ本体

Slide 54

Slide 54 text

パラメータとは

Slide 55

Slide 55 text

もう⼀度APIの実例を⾒てみる

Slide 56

Slide 56 text

郵便番号検索のAPI $ curl https://zipcloud.ibsnet.co.jp/api/search?zipcode=7830060 { "message": null, "results": [ { "address1": "⾼知県", "address2": "南国市", "address3": "蛍が丘", "kana1": "コウチケン", "kana2": "ナンコクシ", "kana3": "ホタルガオカ", "prefcode": "39", "zipcode": "7830060" } ], "status": 200 }

Slide 57

Slide 57 text

郵便番号検索のAPI $ curl https://zipcloud.ibsnet.co.jp/api/search?zipcode=7830060 { "message": null, "results": [ { "address1": "⾼知県", "address2": "南国市", "address3": "蛍が丘", "kana1": "コウチケン", "kana2": "ナンコクシ", "kana3": "ホタルガオカ", "prefcode": "39", "zipcode": "7830060" } ], "status": 200 } URI ペイロード HTTPステータスコード レスポンス クエリパラメータ パスパラメータ