curlで遊ぶHTTPステータスコード入門 — 418 I’m a teapot と遊び心あるAPIの世界

  • URLをコピーしました!

目次

はじめに

ChatGPTによる解説です!

HTTPステータスコードというと、通常は次のようなものを思い浮かべます。

  • 200 OK
  • 404 Not Found
  • 500 Internal Server Error

Web開発をしていると頻繁に目にするため、「ただの機械的な番号」という印象を持ちやすいですが、実はHTTPの世界には技術者たちの遊び心が詰まった文化があります。

その代表例が、HTTPステータスコード 418 I'm a teapot です。

この記事では、ターミナルから実際に 418 を確認する方法、なぜ一部のサイトでは 200 が返るのか、そして自分でも「遊び心あるHTTP API」を作る方法まで、詳しく整理していきます。


418 I’m a teapot とは?

418 I'm a teapot は、ジョークとして定義されたHTTPステータスコードです。

由来は RFC 2324:

Hyper Text Coffee Pot Control Protocol (HTCPCP)

これは1998年のエイプリルフールRFCで、「コーヒーポットをHTTPで制御する」という完全なネタ仕様でした。

その中で、

ティーポットにコーヒーを淹れようとした場合

サーバーは:

418 I'm a teapot

を返す、という設定になっています。

現在では多くの開発者向けサービスが、このジョークを残しています。


最初にハマりやすいポイント

最初に次のコマンドを試す人は多いです。

curl -o /dev/null -s -w "%{http_code}\n" https://httpstatus.com/418

しかし返ってくるのは:

200

です。

なぜ418ではなく200なのか?

理由はシンプルで、

https://httpstatus.com/418

は「418を返すAPI」ではなく、

HTTPステータス418を説明するWebページ

だからです。

つまり:

  • Webページ自体は正常表示されている
  • そのためHTTP的には 200 OK

になります。

これはHTTPの理解としてかなり重要です。

「URLに418と書いてある」ことと、

「HTTPレスポンスとして418を返す」ことは全く別です。


本当に418を返すサービス httpbin.org

最も有名なのが httpbin.org です。

curl -i https://httpbin.org/status/418

実行すると:

HTTP/2 418

    -=[ teapot ]=-

       _...._
     .'  _ _ `.
    | ."` ^ `". _,
    \_;`"---"`|//
      |       ;/
      \_     _/
        `"""`

ASCIIアート付きで返ってきます。

これは開発者界隈ではかなり有名です。


http.cat は何を返しているのか

次のようなコマンドもあります。

curl -i https://http.cat/418

しかし、これを実行すると:

HTTP/2 200
content-type: image/jpeg

になります。

http.cat は:

「HTTPステータスコードをテーマにした画像サイト」

だからです。

つまり:

  • 418 の画像を返している
  • 画像ファイル自体の取得は成功している
  • そのためHTTPレスポンスは 200

になります。

ここでも:

  • 「418をテーマにしたコンテンツ」
  • 「実際のHTTPステータス418」

は別物です。

HTTPを理解するうえで非常に良い学習ポイントです。


curlで遊べる面白いサービス集

1. ランダムHTTPステータス

curl -i https://httpstat.us/random

アクセスするたびに:

  • 200
  • 404
  • 500
  • 418

など、ランダムなHTTPレスポンスが返ります。


2. 任意のステータスコードを返す

curl -i https://httpstat.us/503

503 Service Unavailable を返します。

遅延付きも可能:

curl -i "https://httpstat.us/500?sleep=2000"

2秒待って500を返します。

APIクライアントやリトライ処理のテストに便利です。


3. レスポンス遅延テスト

time curl https://httpbin.org/delay/3

3秒待ってからレスポンスを返します。

タイムアウトや非同期処理の検証によく使われます。


4. User-Agent確認

curl https://httpbin.org/user-agent

自分が送っている User-Agent を確認できます。


5. 自分のIP確認

curl https://httpbin.org/ip

現在のグローバルIPを確認できます。


6. HTTPヘッダ確認

curl https://httpbin.org/headers

サーバー側から見えているHTTPヘッダを一覧表示します。


7. JSONをPOSTする

curl -X POST https://httpbin.org/post \
  -H "Content-Type: application/json" \
  -d '{"tea":"earl grey"}'

送ったJSONをそのまま返してくれます。

API開発のデバッグに非常に便利です。


8. ターミナル天気表示

curl wttr.in/Osaka

ASCIIアート風の天気予報が返ります。

CLI文化圏ではかなり有名です。


9. parrot.live

curl parrot.live

ターミナル上で踊るオウムが表示されます。

完全にネタですが、開発者コミュニティでは非常に有名です。


「HTTPの遊び」は自分でも作れる

ここからが本題です。

実はこれらは、特別な技術ではありません。

ほとんどは:

サーバー側で好きなステータスコードとテキストを返しているだけ

です。

つまり、自分でも簡単に作れます。


Node.jsで最小の遊びAPIを作る

const http = require('http');

http.createServer((req, res) => {
  if (req.url === "/coffee") {
    res.writeHead(418, { "Content-Type": "text/plain" });
    res.end("☕ I'm a teapot");
    return;
  }

  if (req.url === "/fortune") {
    const fortunes = [
      "今日はバグが少ない",
      "デプロイは慎重に",
      "キャッシュを疑え",
    ];

    res.writeHead(200, {
      "Content-Type": "text/plain; charset=utf-8"
    });

    res.end(
      fortunes[Math.floor(Math.random() * fortunes.length)]
    );

    return;
  }

  res.writeHead(404);
  res.end("nothing here");
}).listen(3000);

console.log("http://localhost:3000");

実行:

node server.js

アクセス:

curl localhost:3000/coffee
curl localhost:3000/fortune

作ると楽しいアイデア集

1. 気分ステータスAPI

HTTP/1.1 503 Sleepy

深夜だけ503を返す。


2. 今日の言い訳API

curl localhost:3000/excuse

返答:

works on my machine

3. ランダムHTTPコードAPI

アクセスするたびに:

  • 200
  • 404
  • 418
  • 451
  • 500

などをランダム返却。


4. curl専用サイト

ブラウザからアクセスすると:

Please use curl.

curl経由だと本編を返す。

User-Agentで分岐できます。


5. ASCIIアートAPI

curl localhost:3000/cat

返答:

 /\_/\\
( o.o )
 > ^ <

CLI文化と相性が良いです。


技術力より「センス」が大事

こういう遊び系APIは、巨大システムを作る高度な技術とは少し違います。

重要なのは:

  • 小ネタ
  • 世界観
  • ちょっとしたユーモア
  • 開発者文化への理解

です。

そのため、初心者でも十分作れます。

むしろ:

「妙に記憶に残る小さいサービス」

の方が、開発者コミュニティで愛されることがあります。


無料で公開もできる

現在は個人APIを簡単に公開できます。

代表例:

  • Render
  • Railway
  • Vercel

Node.jsの小さいサーバーなら無料枠でも十分動きます。

そのため:

curl your-api.example.com/coffee

のような、自分専用のネタAPIを世界中に公開できます。


まとめ

HTTPステータスコードは単なる番号ではなく、インターネット文化そのものでもあります。

特に 418 I'm a teapot は:

  • RFC由来の歴史
  • 開発者ジョーク
  • CLI文化
  • API実験文化

が全部詰まった存在です。

そして重要なのは、こういうものは:

自分でも普通に作れる

ということです。

Node.js数十行でも十分面白いものが作れます。

HTTPを学ぶことと、遊ぶことは意外と近い世界にあります。

ぜひ、自分だけの「変なAPI」を作ってみてください。

よかったらシェアしてね!
  • URLをコピーしました!
目次