Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
フレームワーク バックエンド / 2023 ニフティ新人研修
Search
ニフティ株式会社
PRO
December 14, 2023
Programming
0
250
フレームワーク バックエンド / 2023 ニフティ新人研修
2023年度ニフティエンジニア新人研修の講義資料です。
ニフティ株式会社
PRO
December 14, 2023
Tweet
Share
More Decks by ニフティ株式会社
See All by ニフティ株式会社
2つのスクラムチームの 調和的な協働・連携について - ニフティのスクラムトーク Vol. 3 / NIFTY Tech Talk #19
niftycorp
PRO
1
15
チーム力を高めるスクラム実践法:カンバン公開と課題攻略について - ニフティのスクラムトーク Vol. 2 - NIFTY Tech Talk #18
niftycorp
PRO
1
190
スクラムチームと認知負荷 - ニフティのスクラムトーク Vol2. / NIFTY Tech Talk #18
niftycorp
PRO
1
190
Visual Studio Code Dev Containers ススメ Python編 - NIFTY Tech Talk #17
niftycorp
PRO
1
140
dotfilesを作ろう - NIFTY Tech Talk #17
niftycorp
PRO
1
130
フロントエンドを始める前に どうしていっぱいツールがあるの? - NIFTY Tech Talk #17
niftycorp
PRO
1
240
サービスシステム監視 (シフト例)
niftycorp
PRO
0
94
スクラムマスターの技を磨く! ニフティのスクラムトーク vol. 1 - NIFTY Tech Talk #16
niftycorp
PRO
1
210
AWS基礎 / 2023 ニフティ新人研修
niftycorp
PRO
0
550
Other Decks in Programming
See All in Programming
SRE チーム立ち上げ前に考えたこと・取り組んだこと / Considerations and Preparations Before Establishing an SRE Team
mackey0225
3
320
TiDB Serverless ~理想のServerless DBを考える~
soso_15315
1
160
Product Management LT会_クアンド新家
shinshin
0
210
みんなのオブザーバビリティプラットフォームを作ってるんだがパフォーマンスがやばい #mackerelio #srenext
ne_sachirou
0
370
はしめてのプログラミングとロボット制御
watawatavoltage
0
290
Rustのweb開発を助ける 便利なツール紹介
yuki0418
1
190
12年前の『型システム入門』翻訳の思い出話
mame
11
1.2k
Introduction of Happy Eyeballs Version 2 (RFC8305) to the Socket library
coe401_
1
220
ぼっちを避けて楽しむためのアノテコノテ / Various Tips and Tricks to Avoid Loneliness and Have Fun
nrslib
3
1.7k
I/O Extended Android in Korea 2024 ~ Whats new in Android development tools
pluu
0
250
【Go言語】ジェネリクス
tomo1227
0
170
Exploring the Gradually Lost Technical Skills in the Cloud Native Era
hwchiu
2
3.9k
Featured
See All Featured
From Idea to $5000 a Month in 5 Months
shpigford
377
46k
Statistics for Hackers
jakevdp
792
220k
The Language of Interfaces
destraynor
151
23k
The Brand Is Dead. Long Live the Brand.
mthomps
52
36k
Stop Working from a Prison Cell
hatefulcrawdad
266
20k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
121
18k
For a Future-Friendly Web
brad_frost
173
9.2k
What's in a price? How to price your products and services
michaelherold
239
11k
Adopting Sorbet at Scale
ufuk
71
8.8k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
277
13k
How GitHub Uses GitHub to Build GitHub
holman
471
290k
How to Ace a Technical Interview
jacobian
274
23k
Transcript
2023年度エンジニア定例 フレームワーク回バックエンド
バックエンドパートでは 主にAPIについてお話しま す
話す内容 ・APIとは? ・APIの種類 ・REST APIとREST原則 ・リクエストとレスポンス ・HTTPメソッド ・ヘッダー ・URI ・ペイロード
・HTTPステータスコード
APIってなに?
沢山の言葉が出てきます アプリケーションプログラミングインタフェース(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
むずかしい
沢山の言葉が出てきます APIってわかりやすく 言うと何?
ソフトウェアの一部機能を公開/共有 出来る仕組みのこと 引用:https://www.itmanage.co.jp/column/application-programming-interface/
APIを使うと何がうれし い?
最新情報の取得が容易になる ⇒情報の確認や更新の手間が省ける 開発の効率化に繋がる ⇒機能の開発時間を大幅に短縮できる
APIにはどんな種類があ る?
主に2種類 WebAPI(今回説明するのはこちら) ⇒Webサービス機能の一部として提供されているAPI OSが提供するAPI ⇒OS上でプログラミングを行うために用意されたAPI 引⽤︓https://cloudapi.kddi-web.com/magazine/api-types-and-protocols
今回はWebAPIについて 説明
多くのWebAPIはREST原則に基づいている REST原則に基づいたものをREST APIと呼ぶ
REST原則って何?
原則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
ちょっとむずかしい
簡単にすると... 原則1︓サーバーとクライアントがデータ交換をする時に、お互いのセッション状態は記憶してなくてもいいよ 原則2︓所望のデータを取りたい際に、APIを叩くときのおまじないは⼀意に定まるよ 原則3︓APIを叩く際には "GET"、"POST"、"PUT"、"DELETE" を使ってユーザが何をしたいのかをわかりやすくするよ 原則4︓アプリケーション情報と状態遷移の両⽅を扱える ハイパーメディアの使⽤リソースを様々な形式(HTML、XML、 JSON、バイナリ)で表現できるようにします。また、関連する データはハイパーメディア(リンク)としてデータに含め
ることができます
APIの実例を⾒てみる 実例として、zipcloudの郵便番号API検索を利⽤︓https://zipcloud.ibsnet.co.jp/doc/api
郵便番号検索の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 }
何が起きているの︖
APIの概念について例⽰
ファストフードの注⽂に例えると
②商品 ①注⽂ お客 店員 ⾏動︓購⼊ 注⽂︓ハンバーガーセット ⾷べる場所︓店内
所定の注⽂をすると、 きちんと商品が貰える
APIも同じ
所定の注⽂(リクエスト)をすると、 きちんと商品(レスポンス)が貰える
レスポンス リクエスト エンドポイント 通信元 URI プロトコル︓https ドメイン︓zipcloud.ibsnet.co.jp リソースパス︓api/search パラメータ︓zipcode=7830060 メソッド︓GET
HTTPステータスコード︓200 ヘッダー︓受付⽇時、コンテンツタイプなど ヘッダー︓通信元の情報など ペイロード︓住所や読み⽅など (ペイロード︓詳細な情報)
知らない⾔葉が沢⼭ある
ひとつひとつ⾒ていく
レスポンス リクエスト エンドポイント 通信元 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 ヘッダー︓受付⽇時、コンテンツタイプなど ヘッダー︓通信元の情報など ペイロード︓住所や読み⽅など (ペイロード︓詳細な情報)
メソッド(HTTPメソッド) とは︖
リクエストを⾏う際に 「どのような操作を⾏いたいか」 を決定するために使⽤します
主に4つのメソッドが使われている HTTPメソッド 機能 GET リクエスト先の情報(リソース)を取得する際 に使⽤する POST 新しいリソース情報を送り込む PUT リソース情報を新しい情報で置き換える
DELETE リソース情報を削除する
レスポンス リクエスト エンドポイント 通信元 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
レスポンス リクエスト エンドポイント 通信元 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
ヘッダーとは︖
クライアントやサーバーが HTTPリクエストやレスポンスで 追加情報を渡すことができる
代表的なヘッダー情報 ・サーバーとやりとりするための認証情報 ・やりとりした⽇時 ・クッキー ・などなど...
郵便番号検索の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
URIとは︖
名前または場所を識別する書き⽅のルールの総称 (URN U URL) = URI
レスポンス リクエスト エンドポイント 通信元 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
ペイロードとは︖
パケット通信においてパケットに含まれるヘッダやト レーラなどの付加的情報を除いた、データ本体のこと
<リクエスト> POSTやPUTなどのHTTPメソッドを使う場合、 ここに各種情報を⼊れて叩く <レスポンス> 欲しいデータがこの中に⼊っているよ
レスポンス リクエスト エンドポイント 通信元 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 ヘッダー︓受付⽇時、コンテンツタイプなど ヘッダー︓通信元の情報など ペイロード︓住所や読み⽅など (ペイロード︓詳細な情報)
HTTPステータスコードとは︖
レスポンスに表⽰される3桁の番号のこと クライアントのWebブラウザとサーバ間ではHTTPリクエストに対し てレスポンスを返す
ステータスコード 状態 説明 有名なステータスコード 100番台 正常 クライアントからのリクエスト を受け⼊れ可能で、継続して処 理されている状態 100
Continue リクエスト継続可能 200番台 正常 クライアントからリクエストが サーバに送られ理解されて受理 された状態です。 200 OK リクエストが正常に処理できた 300番台 正常 リクエストを完了させるために 追加的な処理が必要です。 300 Multiple Choice リクエストに対して 複数のレスポンスがあることを示す 400番台 エラー クライアント(ユーザ)側で操 作や⼊⼒に不備があった際に出 てしまうエラー 404 Not Found Webページが見つからない 500番台 エラー サーバ側で問題が⽣じていてい る際に出てしまうエラー 500 Internal Server Error 何らかのサーバ 内で起きたエラー
レスポンス リクエスト エンドポイント 通信元 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 ヘッダー︓受付⽇時、コンテンツタイプなど ヘッダー︓通信元の情報など ペイロード︓住所や読み⽅など (ペイロード︓詳細な情報)
パラメータとは
APIが処理に使うための情報 主に3種類 パスパラメータ ⇒URLドメイン以下のパス 例)https://support.nifty.com/mypage/ クエリパラメータ ⇒URLの”?”以降 例)https://zipcloud.ibsnet.co.jp/api/search?zipcode=7830060 ペイロード ⇒HTTPリクエストの際に送るデータ本体
パラメータとは
もう⼀度APIの実例を⾒てみる
郵便番号検索の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 }
郵便番号検索の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ステータスコード レスポンス クエリパラメータ パスパラメータ