POST APIを作る

受け取る側を書く

ここまでの GET は、こちらが持っているものを渡すだけでした。POST は逆で、送られてきたものを受け取ります。問い合わせも出品も、受け取る側は POST です。

書き方は GET と同じで、名前を POST にするだけです。違うのは、引数の request から中身を取り出す一手間が要ることです。

export async function POST(request: Request) { const body = await request.json(); return NextResponse.json({ message: body.name + " さん、ありがとうございます" }); }

request.json() は、送られてきた JSON を読み終わるまで待つので await を付けます。GETsearchParams が URL から読むのに対して、POST は本文から読む、という違いです。

送られてきたものを信じない

ここが POST のいちばん大事なところです。ブラウザのフォームを通ったかどうかに関係なく、誰でも好きな中身を送れます。名前が空でも、本文が無くても届きます。

だから受け取った直後に確かめます。おかしければ、保存せずに断ります。

if (!body.name || !body.body) { return NextResponse.json({ error: "名前と本文は必須です" }, { status: 400 }); }

NextResponse.json の第2引数で状態コードを指定できます。400 は「送られてきた内容がおかしい」という意味です。何も指定しなければ 200 になり、これは「うまくいった」という意味です。

受け取る側の合図を数字で返しておくと、ページ側は res.ok を見るだけで成功と失敗を分けられます。res.ok は状態コードが 200 番台なら true になります。

演習

app/api/contact/route.ts に、問い合わせを受け取る POST を書きます。

ヒント

route.ts
page.tsx
layout.tsx
プレビュー

できているか

  • 問い合わせフォームが出ている
  • 空のまま送ると断られる
  • そろっていれば受け付けられる
  • POST という名前で export している
  • 送られてきた本文を読んでいる
  • おかしい入力を 400 で断っている