データAPIエンドポイント [非推奨]
項目一覧
Data API では、標準の HTTPS requests を介してデータの読み取りと書込みを安全に行えます。この API には、それぞれが MongoDB 操作を表す自動生成されたエンドポイントが含まれています。エンドポイントを使用して、MongoDB データソース内のドキュメントの作成、読み取り、更新、削除、集計を行えます。
たとえばこの POST リクエストでは、 エンドポイントを呼び出して連結クラスターにドキュメントが保存されます。insertOne
curl -s "https://data.mongodb-api.com/app/myapp-abcde/endpoint/data/v1/action/insertOne" \ -X POST \ -H "Content-Type: application/ejson" \ -H "Accept: application/json" \ -H "apiKey: TpqAKQgvhZE4r6AOzpVydJ9a3tB1BLMrgDzLlBLbihKNDzSJWTAHMVbsMoIOpnM6" \ -d '{ "dataSource": "mongodb-atlas", "database": "learn-data-api", "collection": "hello", "document": { "text": "Hello, world!" } }'
{ "insertedId": "5f1a785e1536b6e6992fd588" }
利用可能なすべてのエンドポイントの詳細な API リファレンスについては、データ API OpenAPI リファレンスを参照してください。
注意
Data API エンドポイントは、プライベートエンドポイントではサポートされていません。
データ API を使用する場合
Data API を使用して、HTTPS requests をサポートする任意のアプリやサービスと統合できます。たとえば、次のような場合です。
モバイル アプリケーションから Atlas をクエリする
CI/CD ワークフローでテスト データとログ イベントにアクセスする
Atlas をフェデレーティッド API ゲートウェイに統合する
MongoDB ドライバーまたは Realm SDK を介して、現在サポート対象外の環境から接続する
API エンドポイントを介して呼び出された操作は、接続済みの MongoDB ドライバーを介して呼び出された MongoDB の操作よりも長い時間がかかる可能性が高くなります。高負荷のユースケースやレイテンシの影響を受けやすいアプリケーションの場合、MongoDB ドライバーを使用して Atlas に直接接続することをお勧めします。詳しくは、「MongoDB ドライバー ドキュメント」を参照してください。
ベース URL
アプリ内の Data API エンドポイントは、ベース URL を共有します。このベース URL で App ID を使用してアプリを一意に特定し、呼び出す Data API のバージョンを指定できます。各エンドポイントには、エンドポイントのルートをアプリのベース URL に追加すると作成されるユニークな URL があります。
グローバルにデプロイされたアプリは、次の形式を使用します。
https://data.mongodb-api.com/app/<App ID>/endpoint/data/<API Version>
ローカル配置したアプリのエンドポイントでは、以下のように配置リージョンごとに固有のベース URL が使用されます(例: us-east-1.aws
)。
https://<Region>.<Cloud>.data.mongodb-api.com/app/<App ID>/endpoint/data/<API Version>
Data API のセットアップ
アプリのデータ API は、Atlas App Services UIから、または、App Services CLI を使用して構成ファイルを配置することによって設定できます。
アプリの最新バージョンを取得します。
appservices pull --remote="<Your App ID>" Data API の構成ファイルを定義します。
https_endpoints/data_api_config.json{ "disabled": false, "versions": ["v1"], "can_evaluate": {}, "return_type": <"JSON" | "EJSON"> } アプリをデプロイします。
appservices push
認証
データ API エンドポイントはユーザーごとに異なる状況で実行されるため、アプリではリクエストごとにルールを適用し、ドキュメント スキーマを検証できます。
デフォルトでは、エンドポイントはアプリケーション認証を使用します。アプリケーション認証では、各リクエストに API キーや JWT などのアプリケーション ユーザーの認証情報を含める必要があります。アプリケーションのニーズに合わせて、他のカスタム認証スキームを構成することもできます。
リクエストを認証する方法の例については、「 データ API リクエストの認証」を参照してください。
アプリケーション認証では、ユーザーはアプリに対して有効にした認証プロバイダーを使用してログインする必要があります。リクエストには、認証プロバイダーから付与されたアクセストークンか、ユーザーがログインする際の認証情報を含められます(例: API キー、メールとパスワードなど)。
ユーザー ID 認証では、すべてのリクエストが事前選択済みの、単一のアプリケーション ユーザーとして実行されます。これは、エンドポイントを呼び出したユーザーに関係なく、すべてのリクエストに同じ権限を付与する必要がある場合に有用です。
ユーザーを選択するには、アプリのデータAPI 設定でユーザー アカウント ID を指定します。
{ "run_as_user_id": "628e47baf4c2ac2796fc8a91" }
スクリプト認証は、リクエストがどのアプリケーション ユーザーの権限で実行されるかを決定するために関数を呼び出します。また、カスタム認証と認証スキームの実装に使用できます。
MongoDB CRUD および集計 APIへの完全なアクセス権を持ち、一切のルール、ロール、権限の影響を受けなシステムユーザーとしてリクエストを実行するには、関数により、既存のアプリケーション ユーザーのアカウント ID が文字列または { "runAsSystem": true }
として返される必要があります。
関数を定義するには、アプリのデータAPI 設定でソースコードを指定します。
[ { ..., "run_as_user_id_script_source": "exports = () => {return \"628e47baf4c2ac2796fc8a91\"}" } ]
承認
認証済みユーザーに対し、リクエストごとに追加の認証情報の提供を要求できます。すべての生成済 Data API エンドポイントの認証スキームを、Data API の構成で定義します。
エンドポイントは、リクエストが承認されたことを証明するために、kubernetes secret string を使用する一連の組み込み承認スキームをネイティブでサポートしています。また、組み込みスキームと一緒に、または組み込みスキームの代わりに使用できるカスタム承認スキームを定義することもできます。
組み込みの承認スキーム
エンドポイントは以下の組み込みの承認スキームをサポートしています。
認証済みの全ユーザーにはエンドポイントを呼び出す権限が与えられます。認証済みリクエストには、承認情報を含める必要はありません。
認証済みユーザーは、クエリ パラメーターの値として特定の文字列 secret
を含めることによって、エンドポイントを呼び出す権限があることを証明する必要があります。
文字列をシークレット内で定義し、エンドポイントの構成でシークレットを名前で参照します。
[ { ..., "verification_method": "SECRET_AS_QUERY_PARAM", "secret_name": "secret_verification_string" } ]
リクエストにシークレットを含める方法については、「リクエストの認証」を参照してください。
カスタム承認スキーム
受信した認証済みリクエストの実行を許可するかどうかを判断するためのカスタム承認式を定義できます。式はリクエストごとに評価され、リクエストを許可するには true
に評価する必要があります。式が false
と評価された場合、リクエストは承認されず、エラーとなります。承認に失敗したリクエストは、お客様のアプリの請求使用量にはカウントされません。
承認式では、%%user
などの変数を使用して、呼び出し元のユーザーに基づいて認証したり、 %%request
のような変数を使用して、各受信リクエストの詳細に基づいて決定を下したりできます。
カスタム認証スキームを定義するには、次のようにアプリの Data API 設定で式を指定します。
{ ..., "can_evaluate": { "%%request.requestHeaders.x-secret-key": "my-secret" } }
応答タイプ
エンドポイントにより返される、データ形式は JSON または EJSON です。
デフォルトでは、最新の言語やプラットフォームにより広くサポートされている標準データ形式である JSON が返されます。ただし、JSON のデータ型表現はMongoDB で保存できるすべてのデータ型に対応していないため、一部のデータ型のタイプ情報が失わる場合があります。
また、EJSON 形式でデータを返すようにエンドポイントを構成できます。EJSON では構造化された JSON オブジェクトが使用されるため、MongoDB がサポートするデータ型をもれなく表現します。これにより、応答内の型情報を保持できますが、アプリケーションが EJSON の解析方法と使用方法を理解している必要があります。
Tip
公式の MongoDB ドライバーには、EJSON を扱うメソッドが含まれています。また、npm で bson のようなスタンドアロン パーサーをダウンロードできます。
{ "return_type": "JSON" }
{ "return_type": "EJSON" }
アクセス権限
Data API は、アプリのデータアクセス ルールを使用して、ユーザーごとに、データの読み取りと書込みができるかどうかを判断します。Data API リクエストで特定のコレクションにアクセスするには、まずそのコレクションのルールを定義する必要があります。
また、IP アクセス リストを設定してセキュリティを強化できます。
API バージョン
Data API は組み込みのバージョン管理スキームを使用して、下位互換性を維持しつつエンドポイントを経時的にアップグレードします。受信リクエストでリクエスト URL で使用するエンドポイントのバージョンを指定できます。有効にした任意のバージョンに Data API は対応できます。
新しいバージョンのエンドポイントを呼び出す前に、そのバージョンを有効にする必要があります。最新の Data API バージョンはいつでも有効にできますが、最新バージョンがリリースした後に、古いバージョンを有効にはできません。
現在、次のバージョンがサポートされています。
beta
v1
Data API エンドポイントの呼び出し
任意の標準 HTTP クライアントから Data API エンドポイントを呼び出せます。リクエストごとに、構成ヘッダーと引数をリクエスト本文に含めることができます。
リクエストを行う際には、HTTP/1.1 以上が必要です。
API バージョンの選択
Data API リクエストでは、リクエスト URL で使用する API のバージョンを指定します。リクエストでは、アプリで有効化した任意のバージョンを指定できます。
https://data.mongodb-api.com/app/<App ID>/endpoint/data/<API Version>
リクエストのデータ形式を指定する
Data API リクエストには、リクエスト本文で使用するデータ形式を指定するために Content-Type
ヘッダーを含める必要があります。
Data API リクエストの本文で標準の JSON 型を表現するには、
Content-Type: application/json
を使用します。Data API リクエストの本文で標準的な JSON 型および 追加の EJSON 型を表現するには、
Content-Type: application/ejson
を使用します。
curl -X GET \ https://data.mongodb-api.com/app/myapp-abcde/endpoint/data/v1/action/insertOne \ -H 'apiKey: <API Key>' \ -H 'Content-Type: application/ejson' \ -H 'Accept: application/ejson' \ --data-raw '{ "dataSource": "mongodb-atlas", "database": "learn-data-api", "collection": "hello", "document": { "_id": { "$oid": "629971c0d71aad65bd59c595" }, "greeting": "Hello, EJSON!", "date": { "$date": { "$numberLong": "1654589430998" } } } }'
{ "insertedId": { "$oid": "629971c0d71aad65bd59c595" } }
curl -X POST \ https://data.mongodb-api.com/app/myapp-abcde/endpoint/data/v1/action/updateOne \ -H 'apiKey: <API Key>' \ -H 'Content-Type: application/json' \ --data-raw '{ "dataSource": "mongodb-atlas", "database": "learn-data-api", "collection": "hello", "filter": { "greeting": "Hello, world!" }, "update": { "$set": { "greeting": "Hello, universe!" } } }'
{ "matchedCount": 1, "modifiedCount": 1 }
応答データ形式の選択
応答本文の特定のデータ形式(JSON または EJSON)をリクエストするには、リクエストに Accept
ヘッダーを含めることができます。リクエストに有効な Accept
ヘッダーがない場合、応答には Data API 構成で指定されたデータ形式が使用されます。
curl -X GET \ https://data.mongodb-api.com/app/myapp-abcde/endpoint/data/v1/action/findOne \ -H 'apiKey: <API Key>' \ -H 'Content-Type: application/json' \ -H 'Accept: application/ejson' \ --data-raw '{ "dataSource": "mongodb-atlas", "database": "learn-data-api", "collection": "hello", "projection": { "greeting": 1, "date": 1 } }'
{ "_id": { "$oid": "629971c0d71aad65bd59c545"}, "greeting": "Hello, Leafie!", "date": { "$date": { "$numberLong": "1654589430998" } } }
curl -X POST \ https://data.mongodb-api.com/app/myapp-abcde/endpoint/data/v1/action/findOne \ -H 'apiKey: <API Key>' \ -H 'Content-Type: application/json' \ -H 'Accept: application/json' \ --data-raw '{ "dataSource": "mongodb-atlas", "database": "learn-data-api", "collection": "hello", "projection": { "greeting": 1, "date": 1 } }'
{ "_id": "629971c0d71aad65bd59c545", "greeting": "Hello, Leafie!", "date": "2022-06-07T08:10:30.998Z" }
リクエストの認証
エンドポイントがアプリケーション認証を使用するように設定されている場合は、すべてのリクエストに有効なユーザー アクセス トークンまたはログイン認証情報を含める必要があります。
一般に、アクセストークンを使用したベアラ認証は、認証情報ヘッダーよりもスループットが高く、安全です。可能な場合は、認証情報ヘッダーの代わりにアクセス トークンを使用します。トークンを使用すると、ユーザーを再認証せずに複数のリクエストを実行できます。また、CORS を適用するウェブ ブラウザからリクエストを送信することもできます。
アクセストークンを使用するには、まず、App Services 認証プロバイダを介してユーザーを認証します。次に、App Services から返されたアクセス トークンを取得し、Bearer トークン スキームを使用してリクエストの許可ヘッダーに含めます。 アクセストークンの取得方法と使用方法の詳細については、「Bearer トークン認証」を参照してください。
curl -s "https://data.mongodb-api.com/app/myapp-abcde/endpoint/data/v1/action/findOne" \ -X POST \ -H "Accept: application/json" \ -H "Authorization: Bearer $ACCESS_TOKEN" \ -d '{ "dataSource": "mongodb-atlas", "database": "sample_mflix", "collection": "movies", "filter": { "title": "The Matrix" } }'
あるいは、リクエスト ヘッダーにユーザーの有効なログイン資格情報を含めることもできます。
curl -s "https://data.mongodb-api.com/app/myapp-abcde/endpoint/data/v1/action/findOne" \ -X POST \ -H "Accept: application/json" \ -H "email: bob@example" \ -H "password: Pa55w0rd!" \ -d '{ "dataSource": "mongodb-atlas", "database": "sample_mflix", "collection": "movies", "filter": { "title": "The Matrix" } }'
curl -s "https://data.mongodb-api.com/app/myapp-abcde/endpoint/data/v1/action/findOne" \ -X POST \ -H "Accept: application/json" \ -H "apiKey: TpqAKQgvhZE4r6AOzpVydJ9a3tB1BLMrgDzLlBLbihKNDzSJWTAHMVbsMoIOpnM6" \ -d '{ "dataSource": "mongodb-atlas", "database": "sample_mflix", "collection": "movies", "filter": { "title": "The Matrix" } }'
curl -s "https://data.mongodb-api.com/app/myapp-abcde/endpoint/data/v1/action/findOne" \ -X POST \ -H "Accept: application/json" \ -H "jwtTokenString: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJteWFwcC1hYmNkZSIsInN1YiI6IjEyMzQ1Njc4OTAiLCJuYW1lIjoiSm9obiBEb2UiLCJleHAiOjIxNDU5MTY4MDB9.E4fSNtYc0t5XCTv3S8W89P9PKLftC4POLRZdN2zOICI" \ -d '{ "dataSource": "mongodb-atlas", "database": "sample_mflix", "collection": "movies", "filter": { "title": "The Matrix" } }'
重要
ユーザー向けクライアントで API キーを使用しない
ブラウザやその他のユーザー向けクライアントアプリケーションから認証する場合は、API キーを使用してログインしないでください。代わりに、ユーザーから提供された認証情報を受け取る別の認証プロバイダを使用します。API キーやその他の機密性の高い認証情報をローカルに保存しないでください。
リクエストの許可
データ API の承認構成によっては、リクエストに追加の承認情報を含める必要がある場合があります。
認証済みの全ユーザーにはエンドポイントを呼び出す権限が与えられます。認証済みリクエストには、承認情報を含める必要はありません。
認証済みユーザーは、secret
クエリ パラメータの値としてエンドポイントのシークレット文字列を含めることで、エンドポイントを呼び出す権限があることを証明する必要があります。
例
次の curl
リクエストでは、シークレット文字列"12345"
を使用してシークレット クエリ パラメータの検証を行います。
curl -X POST \ https://data.mongodb-api.com/app/myapp-abcde/endpoint/data/v1/action/findOne?secret=12345 \ -H "Content-Type: application/json" \ -d '{ "dataSource": "mongodb-atlas", "database": "learn-data-api", "collection": "tasks", "filter": { "text": "Do the dishes" } }'
認証済みユーザーは、リクエスト本文とエンドポイントの秘密の string から生成された 16 進数でエンコードされたHMAC SHA- 256ハッシュを含むEndpoint-Signature
ヘッダーを含めることで、エンドポイントを呼び出す権限があることを証明する必要があります。
Endpoint-Signature: sha256=<hex encoded hash>
次の関数を使用して、ペイロード署名を生成できます。
/** * Generate an HMAC request signature. * @param {string} secret - The secret validation string, e.g. "12345" * @param {object} body - The endpoint request body e.g. { "message": "MESSAGE" } * @returns {string} The HMAC SHA-256 request signature in hex format. */ exports = function signEndpointRequest(secret, body) { const payload = EJSON.stringify(body); return utils.crypto.hmac(payload, secret, "sha256", "hex"); };
例
次の curl
には、シークレット値(12345
)で署名されたペイロード署名ヘッダーが含まれています。
curl -X POST \ https://data.mongodb-api.com/app/myapp-abcde/endpoint/data/v1/action/findOne \ -H "Content-Type: application/json" \ -H "Endpoint-Signature: sha256=769cd86855787f476afc8b0d2cf9837ab0318181fca42f45f34b6dffd086dfc7" \ -d '{ "dataSource": "mongodb-atlas", "database": "learn-data-api", "collection": "tasks", "filter": { "text": "Do the dishes" } }'