Docs 菜单
Docs 主页
/ /
Atlas App Services
/ /

HTTP 服务[已弃用]

在此页面上

  • Overview
  • 配置参数
  • 服务操作
  • 和传入网络钩子,
  • 配置
  • 请求有效负载
  • Webhook 函数示例

重要

第三方服务和推送通知弃用

App Services 中的第三方服务和推送通知已弃用,转而创建在函数中使用外部依赖项的 HTTP 端点。

Webhook 已重命名为 HTTPS 端点,行为没有发生变化。您应该迁移现有的 Webhook。

现有服务将继续运行到 9 月30 ,2025

由于第三方服务和推送通知现已弃用,因此,默认将其从 App Services 用户界面中删除。如果您需要管理现有的第三方服务或推送通知,可以执行以下操作以将配置重新添加到用户界面中:

  • 在左侧导航栏中的 Manage(管理)部分下面,单击 App Settings(应用设置)。

  • 启用 Temporarily Re-Enable 3rd Party Services(暂时重新启用第三方服务)旁边的切换开关,然后保存更改。

Atlas App Services HTTP Service 是一个通用接口,可让您与任何可通过 HTTP 提供的服务(例如提供 REST API 的服务)进行通信。当您需要使用 App Services 中未内置自定义服务的服务时,此功能非常有用。

  • 要发送出站HTTP请求,请调用 HTTP操作之一。

  • 要处理来自外部服务的传入请求,请配置传入的 Webhook并将其提供给该服务(如果可能)。 有关示例,请参阅本页上的传入 Webhook部分。

创建 HTTP Service 接口时,您需要为以下参数提供值:

/http_endpoints/<Service Name>/config.json
{
"name": "<Service Name>",
"type": "http",
"config": {}
}
Parameter
说明
Service Name
config.name
此 HTTP Service 接口的名称。它必须不同于应用程序中的所有其他服务接口。

App Services中的HTTP Service服务提供以下操作,您可以在函数和 SDK 中调用这些操作。 每个动作都映射到一个标准 HTTP请求方法。

有关使用 HTTP 服务操作的说明,请参阅调用服务操作。

注意

必须先启用服务规则中的服务操作,然后才能调用。

注意

将 HTTP Webhook 转换为端点

HTTP Service webhook 已弃用,取而代之的是自定义 HTTPS endpoints。您可以一键将现有 Webhook 自动迁移到端点。 要了解如何操作,请参阅将 Webhook 转换为 HTTPS endpoints。

配置HTTP传入 Webhook 时,您需要提供以下形式的 配置文件 :

http_endpoints/<Service Name>/<Webhook Name>/config.json
{
"name": "<Webhook Name>",
"can_evaluate": { <JSON Expression> },
"run_as_authed_user": <Boolean>,
"run_as_user_id": "<App Services User ID>",
"run_as_user_id_script_source": "<Function Source Code>",
"respond_result": <Boolean>,
"fetch_custom_user_data": <Boolean>,
"create_user_on_auth": <Boolean>,
"options": {
"httpMethod": "<HTTP Method>",
"validationMethod": "<Webhook Validation Method>",
"secret": "<Webhook Secret>"
}
}
配置值
说明
Webhook Name
name

必需。 Webhook 的名称。

注意

HTTP 服务接口中的每个传入 Webhook 都必须具有唯一名称。

Respond With Result
respond_result
必需。 如果true ,则 App Services 向调用 Webhook 的客户端发送响应。 响应正文将是 Webhook 函数的返回值。
Run Webhook As
run_as_user_id
run_as_user_id_script_source

可选。 调用 Webhook 时执行 Webhook 函数的App Services 用户的 ID。

可通过三种方式配置执行用户:

  • System:执行用户是系统用户,对MongoDB CRUD和聚合 API 具有完全访问权限,并绕过所有规则和模式验证。

  • User Id:您可以选择特定的应用程序用户来执行该功能。

  • Script:您可以定义一个返回执行用户id函数

您可以直接在run_as_user_id中指定用户 ID,也可以提供字符串化的Atlas Function以接受 Webhook 有效负载并在run_as_user_id_script_source中返回用户 ID。 如果未指定特定用户ID 或解析为用户ID 的函数, App Services将以对 MongoDBCRUD和聚合 API 具有完全访问权限的 系统用户 身份执行 Webhook 函数,并绕过所有规则和模式验证。

HTTP Method
options.httpMethod

HTTP方法 传入的 Webhook 请求应使用的名称。您可以将 Webhook 配置为接受任何方法或指定特定方法。 支持以下方法:

  • GET

  • POST

  • PUT

  • PATCH

  • DELETE

  • HEAD

  • ANY

Request Validation
options.validationMethod

传入请求应使用的请求验证方法。 支持以下验证类型:

Secret
options.secret
如果启用了Request Validation ,则这就是验证密钥。

App Services 会自动将payload文档作为第一个参数传递给传入的 Webhook 函数。 在 HTTP Service 传入的 Webhook 中, payload对象表示传入的 HTTP 请求,并具有以下形式:

{
"query": <query parameters>,
"headers": <request headers>,
"body": <request body (BSON)>
}
字段
说明
query

每个字段对应一个 查询参数 的文档 Webhook URL中包含的外部服务。

例子

使用查询参数someParameter=42&anotherParameter=hello发送到 Webhook URL 的请求将包含以下query文档:

"query": {
"someParameter": 42,
"anotherParameter": "hello"
}
headers

每个字段对应一个 HTTP标头 的文档 Webhook URL中包含的外部服务。

例子

发送到带有Content-Type: application/json标头的 Webhook URL 的请求将包含以下headers文档:

"headers": {
"Content-Type": ["application/json"]
}
body

从请求正文编码的BSON.Binary对象。 您可以通过将二进制对象序列化为字符串,然后将该字符串解析为 EJSON 来访问请求正文:

const body = EJSON.parse(payload.body.text())

以下 Webhook 函数将传入数据插入 MongoDB collection,并在响应 中返回insertedId body

exports = function(payload, response) {
const mongodb = context.services.get("mongodb-atlas");
const requestLogs = mongodb.db("test").collection("requestlogs");
requestLogs.insertOne({
body: EJSON.parse(payload.body.text()),
query: payload.query
}).then(result => {
response.setStatusCode(201);
response.setBody(result.insertedId);
})
};

后退

配置服务规则