使用 AWS Amplify 快速创建 API
长期以来,前端开发人员不得不寻求后端开发人员的帮助,才能为他们的 Web 应用程序搭建并运行 API。这就像云计算的发展历程,以前你需要订购服务器,等待数周,然后还要付费请人维护。云计算改变了这一切,它让人们只需几秒钟就能租用数据中心的虚拟机。
近年来,API 的创建速度也显著提升。托管式 API 网关、函数即服务 (FaaS) 和后端即服务 (BaaS) 等产品的出现,让 API 的创建变得轻而易举。只需注册云服务提供商,上传函数代码,即可立即使用。
AWS Amplify 是我们前端开发人员的得力助手之一。AWS 致力于让所有服务,尤其是托管/无服务器服务,对前端开发人员来说更加便捷易用。Amplify 的目标是成为无服务器时代的 Ruby on Rails。
在本文中,我将向您展示如何仅使用几个命令即可快速设置带有身份验证的 REST 和 GraphQL API。
先决条件
您需要一个 AWS 账户、Node.js、NPM 和 AWS CLI。
我将使用AWS Cloud9 IDE,因为它预装了这些工具。
安装 Amplify CLI
Amplify CLI 可以通过 NPM 安装。
$ npm install -g @aws-amplify/cli
Cloud9 有一个由 IDE 管理的本地 AWS 配置,所以我们无需自行管理。唯一的问题是,它的文件名 Amplify CLI 无法识别。这意味着我们需要为其创建一个符号链接。
$ ln -s ~/.aws/credentials ~/.aws/config
之后,我们可以使用以下命令运行配置:
$ amplify configure
创建项目
要创建一个新项目,我们可以依次使用 NPM 和 Amplify CLI:
$ mkdir amplify-apis
$ cd amplify-apis
$ npm init
$ amplify init
这里我们可以使用所有默认设置。
添加 REST API
我们要添加的第一个 API 是 REST API。为此,我们需要运行以下命令:
$ amplify add api
这将是一个 REST API,所以我们一开始必须选择 REST;之后,我们可以使用几乎所有的默认设置。唯一我们不想做的就是限制 API 访问权限? Restrict API access No。
此 API 的端点将由 API 网关和 AWS Lambda 函数提供支持。函数代码可在以下位置找到:
amplify-apis/amplify/backend/function/amplifyapis<some_id>/src/index.js
为了进行测试,我们需要在 Lambda 函数代码中向响应添加 CORS 标头。
exports.handler = async () => ({
headers: { "Access-Control-Allow-Origin": "*"},
statusCode: 200,
body: JSON.stringify("Hello from Lambda!"),
});
部署 REST API
要部署新添加的 REST API,我们需要运行以下命令:
$ amplify push
系统会询问我们是否要更新云端资源。它还会再次显示我们已定义了一个 API 资源和一个函数资源。
几秒钟后,我们就得到了 API 部署到的 URL。
使用 REST API
如果直接复制命令行界面 (CLI) 中的 URL 到浏览器中使用 REST API,会收到身份验证错误。要使用它,必须设置正确的凭据。最简单的方法是使用 Amplify JS SDK 的 API 客户端。
Amplify CLI 已aws-exports.js在我们的目录中创建了一个包含凭据的文件src,因此我们index.html也可以在该文件中创建一个文件来使用这些凭据。
它index.html应该包含以下代码:
<!doctype html>
<script src="https://unpkg.com/aws-amplify@3.0.22/dist/aws-amplify.min.js"></script>
<script type="module">
import credentials from "./aws-exports.js";
const { Amplify, API } = window.aws_amplify;
Amplify.configure(credentials);
API.get("<API_NAME>", "/items").then(r => alert(r));
</script>
将占位符替换<API_NAME>为文件中的名称aws-exports.js。
如果我们预览 HTML 文件,应该会看到一个弹出窗口,上面写着“来自 Lambda 的问候!”。
添加 GraphQL API
接下来,我们添加一个 GraphQL API;为此,我们可以使用与之前相同的命令:
$ amplify add api
当然,这次我们必须选择“GraphQL”作为API类型。之后,我们就可以使用所有默认设置了。
GraphQL schema 文件位于:
amplify-apis/amplify/backend/api/amplifyapis/schema.graphql
它看起来是这样的:
type Todo @model {
id: ID!
name: String!
description: String
}
该@model指令将在部署 API 时自动创建该类型的 DynamoDB 表。
部署 GraphQL API
要进行部署,我们重新运行推送命令。
$ amplify push
这将向我们展示,当我们确认时,将会创建新的 API 资源。
之后,CLI 还会询问一些关于 GraphQL 查询代码生成的问题;我们可以使用默认值。
几分钟后,我们将再次看到新创建的 GraphQL API 的 URL。
同样,所有凭据最终都会放在src/aws-exports.js文件中,因此我们不必更改 HTML 文件中的配置。
Amplify 还为我们生成了 JavaScript 代码src/graphql,因此我们不必手动编写 GraphQL 查询。
使用 GraphQL API
要使用 GraphQL API,我们需要修改src/index.html文件中的一些代码:
<!doctype html>
<title>Amplify APIs</title>
<script src="https://unpkg.com/aws-amplify@3.0.22/dist/aws-amplify.min.js"></script>
<script type="module">
import credentials from "./aws-exports.js";
import * as queries from "./graphql/queries.js";
const { Amplify, API, graphqlOperation } = window.aws_amplify;
Amplify.configure(credentials);
Promise.all([
API.get("<API_NAME>", "/items"),
API.graphql(graphqlOperation(queries.listTodos)),
]).then(([rest, graphql]) => {
alert(rest);
alert(JSON.stringify(graphql));
});
</script>
我们可以使用生成的src/graphql/queries.js文件,这样就不用编写查询语句了。
get`and`方法graphql返回API一个 Promise,我们将等待它们全部解决,然后显示带有结果的警报。
REST API 只返回一个字符串,以便我们可以立即显示它,但 GraphQL API 返回 JSON,该 JSON 会被解析为一个对象供客户端使用,因此我们必须在发出警报之前将其再次转换为字符串。
结论
只需少量命令行操作 (CLI) 命令即可从零开始创建两个 API。系统还生成了一个凭证文件,我们可以与同事共享,以便他们立即访问这些 API。GraphQL API 甚至还预置了一些基本查询语句。
所有这些命令都有更多配置选项,甚至还附带更复杂的 API 模板,我们可以将其用作起点。
所有功能都使用众所周知的 AWS 服务,并生成 CloudFormation 模板,您可以根据需要自行编辑。
文章来源:https://dev.to/fllstck/rapid-api-creation-with-aws-amplify-3c8i