http-endpoints について
Val Town の開発者向けに、受信リクエストを処理する HTTP val の作成方法を案内します。エンドポイント URL、アクセス制限、実装パターン、プラットフォームの制約を説明します。
主な機能
- 01HTTP リクエスト処理
- 02ライブ URL の確認方法
- 03アクセス制限の挙動
- 04CORS とリダイレクトの扱い
- 05プラットフォーム制約の説明
活用シーン
- 01Val Town での HTTP API 作成
- 02HTTP val からの静的ファイル配信
- 03編集後のエンドポイント応答確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ val-town/ plugins --skill http-endpointsインストール後、Claude Code で/http-endpointsを入力して読み込まれたか確認します。
詳細
HTTP エンドポイント
HTTP val(fileType: "http")はリクエストハンドラーをエクスポートし、HTTP リクエストを受信するたびに実行されます。各 HTTP ファイルにはライブ URL が割り当てられます。自分で URL を作成せず、list_files または create_file のレスポンスから links.endpoint を読み取るか、fetch_val_endpoint を呼び出してください。
val のアプリへのアクセス設定(httpPrivacy)が restricted でない限り、この URL は誰でも利用できます。restricted の場合、認証されていない呼び出し元にはレスポンスではなく、ログインページへの 302 が返されます。詳しくは restricted-access スキルを参照してください。
基本的なハンドラー
// Learn more: https://docs.val.town/vals/http/
export default async function (req: Request): Promise<Response> {
return Response.json({ ok: true });
}
このファイルには export が必要です。ハンドラーには export default を使用してください。
Hono
Hono を使用する場合は、app ではなく app.fetch をエクスポートしてください。
import { Hono } from "npm:hono";
import { parseVal, serveImmutableFile } from "https://esm.town/v/std/utils/index.ts";
const app = new Hono();
app.get("/", (c) => c.text("hello"));
// Immutable asset caching (see the client-side-js skill): serves the
// current-version URLs your HTML shell stamps with immutableFileUrl()
app.get("/__immutable/*", (c) => serveImmutableFile(c.req.path));
// View source redirect
app.get("/source", (c) => c.redirect(parseVal().links.self.val));
// Always add this for full stack traces on errors:
app.onError((err) => Promise.reject(err));
export default app.fetch;
Hono の serveStatic は Val Town では動作しません。静的ファイルには std/utils の serveFile / staticHTTPServer を使用してください。std/utils の API 全体(readFile、serveFile、staticHTTPServer、listFiles、listFilesByPath、httpEndpoint、parseVal、…)については、https://utilities.val.run/docs.md を取得してください。
CORS
Val Town はデフォルトで寛容な CORS ヘッダー(Access-Control-Allow-Origin: *)を追加するため、99%のケースでは CORS に関する対応は不要です。Hono の cors ミドルウェアを使う必要はほとんどありません。
CORS ヘッダーを1つでも独自に設定すると、Val Town はデフォルトのヘッダーをすべて追加しなくなります。そのため、CORS を完全に自分で処理するか、まったく変更しないでください。
リダイレクト
Val Town では Response.redirect は動作しません。代わりに次のいずれかを使用してください。
return new Response(null, { status: 302, headers: { Location: "/path" } });
// or, with Hono:
return c.redirect("/path");
利用できない機能
- WebSocket:Val Town は受信 WebSocket 接続を受け付けません。代わりにポーリング、ロングポーリング、またはサーバー送信イベントを使用してください。
- ファイルシステムへのアクセス:プラットフォームの制約を参照してください。永続状態には
std/sqliteまたはstd/blobを使用してください。
クライアント側のエラーを確認する
HTML レスポンスの場合は、このスクリプトタグを追加して、ブラウザーのエラーを val のログ(get_logs で表示)に送信してください。
<script src="https://esm.town/v/std/catch"></script>
変更の確認
HTTP val を編集した後は、期待どおりの HTTP レスポンスが返されることを確認するために、val を取得してください。この手順を行わずに、変更が完了したと報告しないでください。