PROD欧州主権の BaaS プラットフォームダッシュボードを開く →

パフォーマンス · 10 分読み取り

PostgREST 対 Hasura 対 カスタム API

Affane Daylami · Fondateur · 2026年5月15日

ブログに戻る

3 つのアーキテクチャは、すべてを手作業で記述せずに API を Postgres データベースに接続する方法という、それぞれ独自の方法で同じ質問に答えます。 PostgREST は SQL スキーマから REST API を生成します。 Hasura は、独自の権限システムとビジネス ロジックの拡張ポイントを備えた GraphQL API を生成します。 Node.js などのカスタム API を使用すると、すべてを自分でコーディングする必要がありますが、完全な制御が可能になります。正しい選択は、実際のパフォーマンスよりも、ビジネス ロジックをどこに配置するかによって決まります。

この英語のテキストはフランス語のオリジナルから自動的に生成されたもので、まだレビューされていません。
このページは自動翻訳されました。英語版が正式です。

This article extends two comparisons already published on this blog: our review of PostgREST compatibility and its alternatives and our comparison dedicated to GraphQL layers on Postgres. Here the angle changes: a decision grid between three ways to build an API layer, with Hasura treated for its permissions and business extension points rather than its GraphQL syntax, and a hand-written API as an option in its own right, not a simple "else" line at the bottom of the table.

必需品

  • PostgREST は Postgres スキーマから REST API を自動生成します。任意のビジネス ロジックは不可能であり、RLS が唯一のセキュリティ境界のままです。
  • Hasura は、役割とテーブルによる独自の権限システム、ビジネス Webhook に接続するためのアクション、イベント トリガー、および RESTified エンドポイントを GraphQL エンジン上に追加します。
  • カスタム API (Node.js、Express、Fastify など) を使用すると、ビジネス ロジック、検証、認証を完全に制御できます。ただし、すべてを自分で作成、テスト、保守する必要があります。
  • Aurabase では、PostgREST レイヤーは実際のインスタンスです。 CRUD を超えるビジネス ロジックは、ホストする別のノード サーバーを経由するのではなく、RPC で公開される SQL 関数またはエッジ関数を経由します。
  • 3 つのアプローチは必ずしも相互に排他的ではありません。CRUD 用の PostgREST と機密性の高い操作用のカスタム API を組み合わせるのは、運用環境では一般的なパターンです。
#
概要

本当の選択: ビジネス ロジックを誰がどこで書くか

「PostgREST か Hasura かカスタム API」という質問には、より有益な質問が隠されています。それは、誰がどのツールを使用してビジネス ロジックを作成し、運用環境でこのコードを使用するのは誰ですか?ということです。 3 つのアーキテクチャは対応が異なり、この違いがセキュリティ、実装の速度、長期的な技術的負債など、他のすべてを構造化します。

APIの起源SQLスキーマから生成GraphQL Hasura エンジンを介してスキーマから生成ルートごとに手書きで書かれたもの
カスタム ビジネス ロジックSQL 関数 (RPC) のみアクション (Webhook) + イベントトリガーツールの制約を受けないあらゆるコード
セキュリティモデルRLS Postgres、JWT によって推進される役割RLS への委任ではなく、ロール/テーブルに固有の権限コーディング内容 (ミドルウェア、ORM、オプションの RLS)
追加で対応するには何もありません - 軽量のバイナリ独自のメタデータベースを備えた Hasura エンジン完全なアプリケーションサーバー
学習曲線チームが既に SQL の書き方を知っている場合は低い中 — 新しい権限と設定システムツールには何もありませんが、その他に設計するものはすべてあります
ポストグレストハスラカスタムAPI

厳密には 3 つの列のどれも優れているわけではありません。それぞれが作業を別の場所に移します。 PostgREST は SQL に、Hasura は構成と Webhook に、カスタム API はクラシック アプリケーション コードに移行します。

#
リマインダー

PostgREST: スキーマを直接反映した API

PostgREST は、Postgres スキーマを REST API (フィルター、リレーションシップの埋め込み、RPC、JWT 駆動の RLS) に変換します。書き込むバックエンドはありません。このスコープについては、実際の 互換性と の代替案に関する記事で詳しく説明しています。この比較で重要なのは、PostgREST がどこで停止するかです。

PostgREST には、任意のビジネス ロジックの概念がありません。 RPC 関数、トリガー、制約、RLS ポリシーなどの各ルールは SQL で表現する必要があります。これは許容された制約であり、見落としではありません。図は依然として唯一の真実の情報源であり、アプリケーション層とそれが提供するベースとの間のあらゆるドリフトを排除します。

具体的には、直接の PostgREST リクエストからサードパーティの支払いサービスを呼び出したり、確認メールを送信したり、JavaScript でスコアを計算したりすることは不可能です。このロジックは SQL (pl/pgsql 関数) 内に存在するか、外部でトリガーされる (NOTIFYイベントを発行するトリガーで、PostgREST ではなくなった外部サービスによってリッスンされる) 必要があります。

#
比較

Hasura: 宣言された権限、Webhook によって移植されたビジネス ロジック

Our article on GraphQL layers on Postgres details where the Hasura engine runs and how its permissions differ from the Postgres RLS. Here, the angle is that of business logic: how to plug custom code into a database managed by Hasura, and where.

アクション Hasura は、選択した言語で作成した HTTP Webhook を基盤としたカスタム GraphQL ミューテーションまたはクエリを公開します。 Hasura は、宣言されたスキーマに従って入力を検証し、Webhook を呼び出し、その応答をクライアントに返します。これは、CRUD を超えるあらゆるロジック (決済プロバイダーへの呼び出し、複雑な計算、複数ステップのオーケストレーション) へのゲートウェイです。

イベント トリガー は逆の方向に従います。テーブルの挿入、更新、または削除により Webhook が非同期的にトリガーされ、障害発生時に自動的に再起動されます。これは、ほとんどの Hasura 統合が、このコードを最初の顧客リクエストに結合することなく、サードパーティ サービス (請求、トランザクション電子メール、検索エンジン) を同期するために使用するメカニズムです。

Hasura は、すでに作成された GraphQL クエリを、名前付きパスとパラメーター (独自のドキュメントの用語では RESTifiedエンドポイント) を使用して、典型的な REST ルートとして公開することもできます。フロントエンド チームが、基盤となる GraphQL 権限エンジンを放棄せずに REST を使用したい場合に便利です。

繰り返す価値のあるポイント

Hasura 権限は、ロールごとおよびテーブルごとの Hasura 固有のシステムであり、Postgres RLS への委任ではありません。アクセス ルールを 1 か所ではなく 2 か所で監査できるため、実際のコストと、アクションとイベント トリガーから得られる柔軟性を比較検討できます。

私たちの専用記事で開発されたコンテキスト リマインダー: Hasura は、2025 年 6 月以降、AI エージェント向けに設計されたレイヤーである PromptQL でのコミュニケーションに再び焦点を当てています。GraphQL エンジンは削除されず、公式 Web サイトではまだ「厳しいテスト済み」として表示されています。

#
比較

カスタム API (Node.js、Express、Fastify): すべてをコーディングし、すべてを制御

定義上、手書きの API には制限がありません。あらゆるビジネス ロジック、あらゆる言語、あらゆる依存関係が含まれます。また、これは、3 つのオプションのうち、何も生成されない唯一のオプションです。すべてのルート、すべての検証、データベースへのすべての接続は、ユーザーが所有し、保守する必要があるコードです。

routes/orders.js (Express, extrait)javascript
// フィルター、ソート、リレーションシップの埋め込みは手作業で書かれています。
// このルートのみ - API リソースごとに繰り返します
router.get('/orders', async (req, res) => {
  const { status } = req.query
  const result = await db.query(
    `SELECT o.id, o.total, c.email AS customer_email
     FROM orders o JOIN customers c ON c.id = o.customer_id
     WHERE o.status = $1 ORDER BY o.created_at DESC`,
    [status]
  );
  res.json(result.rows)
});

このモデルが手動作業と引き換えに提供するものは、エラーと返された HTTP コードの完全な制御、従来のテスト容易性 (宣言的構成ではなくハンドラー)、およびすでに言語を習得しているチームにとって新しい DSL を学習する必要がないことです。

代わりにかかる費用: CRUD、ページネーション、フィルターをリソースごとに手動で記述して保守する必要があります。自動的に継承される RLS を使用せずに、自分自身で実装および監査するための認証と許可。ネストされた各関係が規律なしに独自の Postgres クエリをトリガーした場合、N+1 クエリが発生するリスク。 API ドキュメントは手動で維持するか、サードパーティのジェネレーターを介して統合する必要があります。

生のパフォーマンスに関しては、「Node.js は Rust よりも遅いのか」という質問は、それ自体がトピックです。 Rust と Node.js のレイテンシーに関する記事 では、 ベンチマーク方法論ページでアップストリームに宣言されている方法論を使用して詳細に説明しています。カスタム API は、すでに使用している HTTP サービスと同じパフォーマンス プロファイルを持ち、構造によって良くも悪くもなりません。 PostgREST がどこで飽和し、どの時点でカスタム レイヤーが必要になるかを正確に知るには、 運用環境における PostgREST の実際の制限に関する記事を参照してください。

#
決定

比較表: 3 つのオプションを並べて表示

アーキテクチャ以外にも、実装の速度、実際のビジネスの柔軟性、長期的な技術的負債、各オプションが最も快適な一般的な使用例という 4 つの基準が選択の際によく考えられます。

初期設定分 - スキーマはすでに存在します時間 — ベースに接続し、権限を設定します数日から数週間 — 各ルートを書きます
ビジネスの柔軟性SQL (RPC、トリガー) に限定アクション/イベント トリガー経由は良好ですが、外部 Webhook を経由します全体的、単純明快
期間技術的負債弱い — 図は依然として唯一の真実の情報源である中 — スキーマに加えて維持する Hasura メタデータチームが規律(テスト、文書化、レビュー)なしで成長する場合は高い
典型的な使用例安定したスキーマで直接 CRUD を実行し、チームは SQL に慣れています複数のデータ ソースまたは AI エージェント指向のロジックをフェデレーションします。複雑なビジネス ロジック、多数のサードパーティ統合
ポストグレストハスラカスタムAPI
#
コードをチェックインしました

Aurabase プロジェクトのビジネス ロジックはどこに配置されますか

Aurabase Postgres エンジンプロジェクトでは、CRUD レイヤーは、近似的な再実装ではなく、実際の PostgREST インスタンスによってすでにカバーされています。この比較に関して未解決のままの疑問は、CRUD を超えるものをどこに記述するかということです。

2 つのパスが存在し、相互に排他的ではありません。 1 つ目: RPC で公開される SQL 関数。SQL で表現するのが合理的なロジック (合計の計算、複数のテーブル間の相互検証、単一トランザクションでのカスケード更新) を対象とします。

RPC 呼び出し - SQL のビジネス ロジックbash
curl -X POST "https://<gateway>/v1/db/<project_id>/rpc/apply_discount" \
  -H "apikey: <votre-cle-api>" \
  -H "Content-Type: application/json" \
  -d '{"order_id": 42, "code": "WELCOME10"}'

2 番目の方法: エッジ関数。決済 API の呼び出し、電子メールの送信、埋め込みの計算など、SQL ドメインを超えるあらゆるものに対応します。 Aurabase では 2 つのパスがそこに通じています。Supabase とまったく同じように Deno (TypeScript) コードを実行する Studio エディターと、Rust で書かれ WASM でコンパイルされた関数の別のパスを目指す aura functions deployCLI です。詳細については、 統合 Rust アーキテクチャを参照してください。この記事の純粋な「カスタム API」オプションとは異なり、どちらのパスでも別のノード サーバーをホストする必要はありません。サーバーは完全にユーザーの責任です。

このディストリビューションは、ここで比較した 3 つのモデル間の不安定な妥協点ではありません。文字通り、CRUD 用の PostgREST、RPC とトリガーを介したイベント ロジック用の Hasura Actions に近いブリック、および完全なアプリケーション サーバーの操作を回避するエッジ機能です。「すべての PostgREST」と「すべてのカスタム」の間で二者択一を強制する必要はありません。

#
決定

状況に応じた選び方

最も頻繁に現れるのは 4 つの状況です。正しい選択は、ツールの人気ではなく、ビジネス ロジックが何を必要とするかによって決まります。

  • スキーマは安定しており、ビジネス ロジックは SQL です。 自己ホスト型 PostgREST、またはネイティブに統合された (Aurabase、Supabase) で十分です。これ以上ホストするものはなく、スキーマが唯一の信頼できる情報源のままです。
  • 複数のデータ ソースを統合したい場合、またはロードマップが AI エージェントによるデータの利用を対象としている場合。 Hasura は PromptQL レイヤーを備えており、この領域によりよく適合します。
  • あなたの製品には豊富なビジネス ロジック、多数のサードパーティ統合があり、チームはすでにアプリケーション言語を備えています。 カスタム API は依然として最も直接的な選択肢ですが、その作成と長期にわたる保守にはコストがかかります。
  • ビジネス ロジック (RPC、エッジ関数) 用の実スペースを放棄したり、悪用するアプリケーション サービスをもう 1 つスタックしたりせずに、自己生成された CRUD が必要です。 これは、前のセクションの Aurabase に適用されたこの比較で文書化された角度です。
#
よくある質問

よくある質問

PostgREST はカスタム Node.js API を置き換えることができますか?+
CRUD レイヤーの場合は、多くの場合「はい」です。 SQL 関数が適切に表現できる範囲を超えるビジネス ロジックについては、いいえ: このロジックをアプリケーション コードに委任するカスタム API や Hasura アクションとは異なり、PostgREST には任意のビジネス ロジックの概念がありません。
Hasura はオープンソースですか?+
Hasura GraphQL エンジンはオープンソースとしてリリースされています。 PromptQL は、Hasura が 2025 年 6 月からコミュニケーションに再注力している AI エージェント用に設計されたレイヤーであり、このエンジンとは別の製品です。
同じプロジェクトで PostgREST とカスタム API を組み合わせることができますか?+
はい、これはよくあるパターンです。 PostgREST はクライアントに公開される標準 CRUD をカバーしますが、別の API または関数は機密性の高い操作 (支払い、電子メール送信、複数ステップのロジック) を処理し、同じ Postgres データベースを呼び出します。
Aurabase は Hasura 統合を提供しますか?+
いいえ。Aurabase は、Hasura ではなく、REST 用に PostgREST をネイティブに統合し、GraphQL 用にオプションで pg_graphql を統合します。 3 つのアプローチは理論上は同等ですが、プラットフォーム上では互換性がありません。

導入の準備はできていますか?

5 分でバックエンドが完成します。

クレジット カードは不要 · 500 MB 無料 · 50,000 MAU