HTTPの基本要素
- メソッド:GET(取得)、POST(作成)、PUT(全置換)、PATCH(部分更新)、DELETE(削除)
- ステータス:200(成功)、201(作成)、204(内容なし)、400/401/403/404、500系(サーバー)
- ヘッダー:
Content-Type、Authorization、Cache-Control、ETag、Acceptなど
ベストマッチ
最短で課題解決する一冊
この記事の内容と高い親和性が確認できたベストマッチです。早めにチェックしておきましょう。
REST設計の最小原則
- リソースは名詞で表現:
/articles,/articles/{id} - アクションはメソッドで表現:
POST /articles(作成) - クエリは絞り込み/並び替え:
/articles?tag=js&sort=-updatedAt
さらに理解を深める参考書
関連記事と相性の良い実践ガイドです。手元に置いて反復しながら進めてみてください。
例:Next.js Route HandlerでCRUD(概念)
// app/api/articles/[id]/route.ts
let store = new Map<string, any>();
export async function GET(_: Request, { params }: { params: { id: string } }) {
const a = store.get(params.id); if (!a) return new Response('Not Found', { status: 404 });
return Response.json(a, { headers: { 'Cache-Control': 'max-age=60' } });
}
export async function PUT(req: Request, { params }: { params: { id: string } }) {
const body = await req.json(); store.set(params.id, body);
return new Response(null, { status: 204, headers: { ETag: 'W/"v1"' } });
}条件付きGET(ETag)
// If-None-Match で差分転送
export async function GET(req: Request, { params }: { params: { id: string } }) {
const etag = 'W/"v1"';
if (req.headers.get('if-none-match') === etag) return new Response(null, { status: 304 });
return Response.json({ id: params.id, title: 'Hello' }, { headers: { ETag: etag } });
}さらに理解を深める参考書
関連記事と相性の良い実践ガイドです。手元に置いて反復しながら進めてみてください。
キャッシュの基本
- 静的は長期(
max-age=31536000, immutable) - 準動的は短期+SWR(
max-age=60, stale-while-revalidate=300) - ユーザー固有は
no-store
さらに理解を深める参考書
関連記事と相性の良い実践ガイドです。手元に置いて反復しながら進めてみてください。
よくあるアンチパターン
- 動詞をパスに入れる(
/createArticle) - GETで状態変更(キャッシュ破綻/セキュリティ懸念)
- 不要な200返却(適切な4xx/5xxで意味を伝える)
さらに理解を深める参考書
関連記事と相性の良い実践ガイドです。手元に置いて反復しながら進めてみてください。
まとめ
「名詞のパス+メソッドで意味を表現+適切なキャッシュ」を守るだけで、実用的なREST APIが作れます。
さらに理解を深める参考書
関連記事と相性の良い実践ガイドです。手元に置いて反復しながら進めてみてください。
この記事をシェア



![標準SQL+データベース入門 ——RDBとDB設計、基本の力[MySQL/PostgreSQL/MariaDB/SQL Server対応]](https://m.media-amazon.com/images/I/51FLS9XpmUL._SL500_.jpg)

