Docs Menu
Docs Home
/ /
Atlas App Services
/

データAPIエンドポイント [非推奨]

項目一覧

  • データ API を使用する場合
  • ベース URL
  • Data API のセットアップ
  • 認証
  • 承認
  • 応答タイプ
  • アクセス権限
  • API バージョン
  • Data API エンドポイントの呼び出し
  • 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 エンドポイントは、プライベートエンドポイントではサポートされていません。

Data API を使用して、HTTPS requests をサポートする任意のアプリやサービスと統合できます。たとえば、次のような場合です。

  • モバイル アプリケーションから Atlas をクエリする

  • CI/CD ワークフローでテスト データとログ イベントにアクセスする

  • Atlas をフェデレーティッド API ゲートウェイに統合する

  • MongoDB ドライバーまたは Realm SDK を介して、現在サポート対象外の環境から接続する

API エンドポイントを介して呼び出された操作は、接続済みの MongoDB ドライバーを介して呼び出された MongoDB の操作よりも長い時間がかかる可能性が高くなります。高負荷のユースケースやレイテンシの影響を受けやすいアプリケーションの場合、MongoDB ドライバーを使用して Atlas に直接接続することをお勧めします。詳しくは、「MongoDB ドライバー ドキュメント」を参照してください。

アプリ内の Data API エンドポイントは、ベース URL を共有します。このベース URL で App ID を使用してアプリを一意に特定し、呼び出す Data API のバージョンを指定できます。各エンドポイントには、エンドポイントのルートをアプリのベース URL に追加すると作成されるユニークな URL があります。

グローバルにデプロイされたアプリは、次の形式を使用します。

エンドポイント ベース URL(グローバルアプリ):
https://data.mongodb-api.com/app/<App ID>/endpoint/data/<API Version>

ローカル配置したアプリのエンドポイントでは、以下のように配置リージョンごとに固有のベース URL が使用されます(例: us-east-1.aws)。

エンドポイントベース URL(ローカルアプリ)
https://<Region>.<Cloud>.data.mongodb-api.com/app/<App ID>/endpoint/data/<API Version>

アプリのデータ API は、Atlas App Services UIから、または、App Services CLI を使用して構成ファイルを配置することによって設定できます。

  1. 左側のナビゲーションで [HTTPS Endpoints] をクリックしたら、Data API タブを選択します。

  2. アプリのデータAPI を有効にします。これにより、アプリにリンクされた任意の MongoDB データソースにアクセスできるエンドポイントが生成されます。

  3. 認証方法を選択し、認証プロバイダを有効にします。

  4. 応答タイプを選択します。

  5. データ API 構成を保存します。

  6. リンクされたデータソース内のコレクションのルールを定義してアクセス権限を構成し、リクエストがデータを安全に読み書きできるようにします。

  7. アプリを保存して配置します。

  1. アプリの最新バージョンを取得します。

    appservices pull --remote="<Your App ID>"
  2. Data API の構成ファイルを定義します。

    https_endpoints/data_api_config.json
    {
    "disabled": false,
    "versions": ["v1"],
    "can_evaluate": {},
    "return_type": <"JSON" | "EJSON">
    }
  3. アプリをデプロイします。

    appservices push

データ API エンドポイントはユーザーごとに異なる状況で実行されるため、アプリではリクエストごとにルールを適用し、ドキュメント スキーマを検証できます。

デフォルトでは、エンドポイントはアプリケーション認証を使用します。アプリケーション認証では、各リクエストに API キーや JWT などのアプリケーション ユーザーの認証情報を含める必要があります。アプリケーションのニーズに合わせて、他のカスタム認証スキームを構成することもできます。

リクエストを認証する方法の例については、「 データ API リクエストの認証」を参照してください。

アプリケーション認証では、ユーザーはアプリに対して有効にした認証プロバイダーを使用してログインする必要があります。リクエストには、認証プロバイダーから付与されたアクセストークンか、ユーザーがログインする際の認証情報を含められます(例: API キー、メールとパスワードなど)。

ユーザー ID 認証では、すべてのリクエストが事前選択済みの、単一のアプリケーション ユーザーとして実行されます。これは、エンドポイントを呼び出したユーザーに関係なく、すべてのリクエストに同じ権限を付与する必要がある場合に有用です。

ユーザーを選択するには、アプリのデータAPI 設定でユーザー アカウント ID を指定します。

http_endpoints/data_api_config.json
{
"run_as_user_id": "628e47baf4c2ac2796fc8a91"
}

スクリプト認証は、リクエストがどのアプリケーション ユーザーの権限で実行されるかを決定するために関数を呼び出します。また、カスタム認証と認証スキームの実装に使用できます。

MongoDB CRUD および集計 APIへの完全なアクセス権を持ち、一切のルール、ロール、権限の影響を受けなシステムユーザーとしてリクエストを実行するには、関数により、既存のアプリケーション ユーザーのアカウント ID が文字列または { "runAsSystem": true } として返される必要があります。

関数を定義するには、アプリのデータAPI 設定でソースコードを指定します。

http_endpoints/data_api_config.json
[
{
...,
"run_as_user_id_script_source": "exports = () => {return \"628e47baf4c2ac2796fc8a91\"}"
}
]

認証済みユーザーに対し、リクエストごとに追加の認証情報の提供を要求できます。すべての生成済 Data API エンドポイントの認証スキームを、Data API の構成で定義します。

エンドポイントは、リクエストが承認されたことを証明するために、kubernetes secret string を使用する一連の組み込み承認スキームをネイティブでサポートしています。また、組み込みスキームと一緒に、または組み込みスキームの代わりに使用できるカスタム承認スキームを定義することもできます。

エンドポイントは以下の組み込みの承認スキームをサポートしています。

認証済みの全ユーザーにはエンドポイントを呼び出す権限が与えられます。認証済みリクエストには、承認情報を含める必要はありません。

認証済みユーザーは、クエリ パラメーターの値として特定の文字列 secret を含めることによって、エンドポイントを呼び出す権限があることを証明する必要があります。

文字列をシークレット内で定義し、エンドポイントの構成でシークレットを名前で参照します。

http_endpoints/data_api_config.json
[
{
...,
"verification_method": "SECRET_AS_QUERY_PARAM",
"secret_name": "secret_verification_string"
}
]

リクエストにシークレットを含める方法については、「リクエストの認証」を参照してください。

認証済みユーザーは、リクエスト本文と秘密の string から生成された 16 進数でエンコードされた HMAC SHA- 256ハッシュを含むEndpoint-Signatureヘッダーを含めることで、エンドポイントを呼び出す権限があることを証明する必要があります。

文字列をシークレット内で定義し、エンドポイントの構成でシークレットを名前で参照します。

リクエストに署名する方法については、「リクエストの承認」を参照してください。

受信した認証済みリクエストの実行を許可するかどうかを判断するためのカスタム承認を定義できます。式はリクエストごとに評価され、リクエストを許可するには true に評価する必要があります。式が false と評価された場合、リクエストは承認されず、エラーとなります。承認に失敗したリクエストは、お客様のアプリの請求使用量にはカウントされません。

承認式では、%%user などの変数を使用して、呼び出し元のユーザーに基づいて認証したり、 %%request のような変数を使用して、各受信リクエストの詳細に基づいて決定を下したりできます。

カスタム認証スキームを定義するには、次のようにアプリの Data API 設定で式を指定します。

http_endpoints/data_api_config.json
{
...,
"can_evaluate": {
"%%request.requestHeaders.x-secret-key": "my-secret"
}
}

エンドポイントにより返される、データ形式は JSON または EJSON です。

デフォルトでは、最新の言語やプラットフォームにより広くサポートされている標準データ形式である JSON が返されます。ただし、JSON のデータ型表現はMongoDB で保存できるすべてのデータ型に対応していないため、一部のデータ型のタイプ情報が失わる場合があります。

また、EJSON 形式でデータを返すようにエンドポイントを構成できます。EJSON では構造化された JSON オブジェクトが使用されるため、MongoDB がサポートするデータ型をもれなく表現します。これにより、応答内の型情報を保持できますが、アプリケーションが EJSON の解析方法と使用方法を理解している必要があります。

Tip

公式の MongoDB ドライバーには、EJSON を扱うメソッドが含まれています。また、npm で bson のようなスタンドアロン パーサーをダウンロードできます。

https_endpoints/data_api_config.json
{
"return_type": "JSON"
}
https_endpoints/data_api_config.json
{
"return_type": "EJSON"
}

Data API は、アプリのデータアクセス ルールを使用して、ユーザーごとに、データの読み取りと書込みができるかどうかを判断します。Data API リクエストで特定のコレクションにアクセスするには、まずそのコレクションのルールを定義する必要があります。

また、IP アクセス リストを設定してセキュリティを強化できます。

Data API は組み込みのバージョン管理スキームを使用して、下位互換性を維持しつつエンドポイントを経時的にアップグレードします。受信リクエストでリクエスト URL で使用するエンドポイントのバージョンを指定できます。有効にした任意のバージョンに Data API は対応できます。

新しいバージョンのエンドポイントを呼び出す前に、そのバージョンを有効にする必要があります。最新の Data API バージョンはいつでも有効にできますが、最新バージョンがリリースした後に、古いバージョンを有効にはできません。

現在、次のバージョンがサポートされています。

  • beta

  • v1

任意の標準 HTTP クライアントから Data API エンドポイントを呼び出せます。リクエストごとに、構成ヘッダーと引数をリクエスト本文に含めることができます。

リクエストを行う際には、HTTP/1.1 以上が必要です。

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" }
}'

戻る

データAPIとHTTPS endpointsの廃止