リソースルート
リソースルートは、アプリケーションUIの一部ではありませんが、アプリケーションの一部です。あらゆる種類のレスポンスを送信できます。
RemixのほとんどのルートはUIルート、つまり実際にコンポーネントをレンダリングするルートです。しかし、ルートは常にコンポーネントをレンダリングする必要はありません。ルートをWebサイトへの汎用的なエンドポイントとして使用したいケースがいくつかあります。以下は例です。
- Remix UIとサーバーサイドコードを再利用するモバイルアプリ向けのJSON API
- 動的にPDFを生成する
- ブログ投稿やその他のページのソーシャル画像を動的に生成する
- StripeやGitHubなどの他のサービス向けのWebhook
- ユーザーの好みのテーマに合わせてカスタムプロパティを動的にレンダリングするCSSファイル
リソースルートの作成
ルートがデフォルトのコンポーネントをエクスポートしていない場合、リソースルートとして使用できます。 GET
で呼び出されると、ローダーのレスポンスが返され、親ルートのローダーはどちらも呼び出されません(UIには必要ですが、これはUIではありません)。 POST
で呼び出されると、アクションのレスポンスが呼び出されます。
たとえば、レポートをレンダリングするUIルートを考えてみましょう。リンクに注目してください。
ページのPDFバージョンへのリンクがあります。これを機能させるには、その下にリソースルートを作成します。コンポーネントがないことに注目してください。これは、リソースルートであることを示しています。
ユーザーがUIルートからリンクをクリックすると、PDFに移動します。
リソースルートへのリンク
リソースルートへのリンクには、reloadDocument
を使用することが必須です。
リソースルートへのリンク時には、注意すべき微妙な点があります。 <Link reloadDocument>
またはプレーンな<a href>
を使用してリンクする必要があります。 reloadDocument
なしで通常の<Link to="pdf">
を使用してリンクすると、リソースルートがUIルートとして扱われます。Remixはfetch
でデータを取得し、コンポーネントをレンダリングしようとします。あまり心配しないでください。この間違いをすると、役に立つエラーメッセージが表示されます。
URLエスケープ
リソースルートにはファイル拡張子を追加する必要があるでしょう。これは、Remixのルートファイルの命名規則の1つに、.
が/
になるため、UIをネストせずにURLをネストできるという問題があるため、難しいことです。
ルートのパスに.
を追加するには、[]
エスケープ文字を使用します。PDFルートファイル名は、次のように変更されます。
異なるリクエストメソッドの処理
GET
リクエストを処理するには、ローダー関数をエクスポートします。
POST
、PUT
、PATCH
、DELETE
リクエストを処理するには、アクション関数をエクスポートします。
Webhook
リソースルートは、Webhookを処理するために使用できます。たとえば、新しいコミットがリポジトリにプッシュされたときにGitHubから通知を受け取るWebhookを作成できます。