APIハンズオン

1. APIとは何か

APIハンズオン

名前がそのまま意味

Application
Programming
Interface
アプリをプログラムから使うための窓口
APIハンズオン

インターフェース = 窓口

ブラウザ
決まった形で頼む ──────▶
◀────── 答えが返る
↓ この面が窓口 = API
server.js
inter(間) + face(面) = 間にある面 厚みのない1枚の面
窓口はサーバー側の表面 銀行の窓口が銀行の一部なのと同じ
APIハンズオン

窓口があると うれしいことが2つ

利点1 中身を知らなくても使える
利点2 見せたくないものを隠せる
APIハンズオン

利点1 中身を知らなくても使える

裏側でやっていること 自分が書くこと
天気 観測データを集めて スパコンで計算 fetch("/weather")
地図 膨大な画像から その地点を切り出す fetch("/map")
翻訳 大量の文章で学習したモデルで推論 fetch("/translate")
左は知らなくていい 書くのは右の1行だけ
自分で気象観測をしなくても 天気を出すアプリがつくれる
APIハンズオン

利点2 見せたくないものを隠せる

ブラウザ側 api.html / api.js
開発者ツールで
誰でも中身が見える
API
サーバー側 server.js
中身は
誰にも見えない
パスワードの照合 APIキー データベースの情報は 全部この右側に置く
この見えない側をバックエンドと呼ぶ
APIハンズオン

窓口のルールは この4つ

これがルール 今日つくるもの
どのURLか /auth
どのメソッドか POST
何を渡すか password
何が返るか { ok, message }
この4つが決まっていれば 別々の人がつくっても繋がる
②のGETとPOSTが 前の章でやったやつ
APIハンズオン

4つを組み合わせると コードになる

// server.js
if (req.method === "POST" && pathname === "/auth") {
//      ② メソッド                     ① URL

  const body = await req.json();
//      ③ 送られたもの を受け取る

  return Response.json({ ok: true, message: "ログインできました" });
//                     ④ 返すもの
}
今日書くのは これだけ
API を増やすときも ①②③④を決めるだけ

2. server.jsは
全部の入口

APIハンズオン

これがテンプレートの最初の形

import { serveDir } from "jsr:@std/http/file-server";

Deno.serve((req) => {                    // 通信は全部ここに来る
  const pathname = new URL(req.url).pathname;
  console.log(pathname);                 // 叩かれたパスを表示

  if (req.method === "GET" && pathname === "/welcome-message") {
    return new Response("jigインターンへようこそ!");
  }

  return serveDir(req, { fsRoot: "public", ... });
});
テンプレートから始まったときの server.js
書き換えたのは中身だけ 形はこのまま残っている
APIハンズオン

上から順に「自分の担当か」を見ている

通信が来た
1 GETで /welcome-message か? → バックエンドの情報 を返す
2 どれでもない → serveDirpublic の中のファイル を返す
一番下の serveDir は「どれにも当たらなかったとき」の受け皿
APIハンズオン

public の中のファイルも server.js が返している

server.js
public の中のファイル index.html / styles.css
index.js
バックエンドの情報 /welcome-message
の文字
画面をつくる部品も データも 同じ入口から 同じ形で返る
だから 1ファイルで両方できている
APIハンズオン

1つずつ 4回に分けて返る

叩かれたURL 上から順に見た結果 返ってきたもの
/ どれにも当たらない → serveDir index.html
/styles.css どれにも当たらない → serveDir CSS
/index.js どれにも当たらない → serveDir JavaScript
/welcome-message 1番目のifに当たった 「ようこそ」の文字
3回は public の中のファイル 1回は バックエンドの情報
どちらも同じ server.js が 同じ形で返している
APIハンズオン

自分のサイトで見てみよう

1 開発者ツール(F12)→ Network タブ
2 ページを再読み込みすると 4行ならぶ
NetworkタブにHTML CSS JS APIの4行が並んでいる
Initiator を見ると 誰が呼んだかが分かる
styles.cssindex.js(index) から つまりHTMLが呼んでいる

3. APIハンズオン

APIハンズオン

デプロイしたアプリに 足していく

1 クローンしたフォルダを開く 例: deno-app
2 server.js に窓口を1つ足す
3 直すたびに push する 今日は自分のPCでは動かさない デプロイ先のURLで確かめる
4 デプロイ先のURLに /api.html を付けると スマホからも使える
作業するのは自分のリポジトリ
教材リポジトリ(intern-dev-tutorialではない
APIハンズオン

進め方

1 サーバー側に書く server.js
2 ブラウザ側を新しくつくる api.html / api.js
3 push する
4 /api.html を開いて ボタンで確かめる
保存しただけでは 反映されない 動いているのはGitHubに置いたコード
APIハンズオン

今日さわるファイルは3つ

ファイル 今日の扱い
server.js return serveDir(上に足す
public/api.html 新しくつくる 今日の画面
public/api.js 新しくつくる 今日書くJSは全部ここ
もとの index.html触らない 別のページをつくる
serveDir より下に書くとたどりつかないので 必ずその上
APIハンズオン

READMEへ!