快速设置REST服务器和GraphQL服务器
在上一篇关于使用JavaScript的Import和Vue组件的文章后继续,我将整理并介绍一下模板环境的使用方法。
这次主题是关于服务器端,我将记录下REST服务器和GraphQL服务器的启动方法作为备忘录。
模板已经上传到以下GitHub。
poruruba/express_template 是一个在 GitHub 上的项目,
由于经常添加功能,因此可能还包含了未在此处列出的功能。
启动REST服务器
在api/controllers/的下方创建一个适当的文件夹,并创建index.js和swagger.yaml。
通常情况下,index.js会模拟通过API Gateway传递给Lambda的方式。
(i) 当使用JSON/POST调用时
接收到的调用可以在index.js的exports.handler中接收。要获取指定的参数,请按以下方式操作。
exports.handler = async (event, context, callback) => {
var body = JSON.parse(event.body);
(ii) 在GET调用的情况下
同样,接收到的调用可以在index.js的exports.handler中接收。若要获取QueryString参数,可以按以下方式进行。
exports.handler = async (event, context, callback) => {
var params = event.queryStringParameters;
由于通常以application/json的形式返回响应,因此我们准备了辅助函数来以这种方式返回。像这样返回。
return new Response({ message: 'Hello World' });
如果要以二进制返回,则可以按照以下方式进行。
return new BinResponse("application/octet-stream", buffer);
如果以文本形式回答的话,可以这样写。
return new TextResponse("text/html", str);
如果想要进行重定向,请按照以下方式进行。
return new Redirect(url);
请参考位于api/controllers文件夹下的示例,swagger.yaml文件定义了端点。在Swagger2.0的定义中,指定了paths和definitions(实际上只引用了端点名称……)。
我让您可以设置一些选项。
〇选项标签:x-handler
x-handler: 任意
通常情况下,当调用端点时,将调用index.js中的exports.handler函数,但如果希望通过其他函数名进行调用,则在此处进行指定。
虽然不是用于身份验证验证,但会解析并将结果传递给index.js。
〇选项标签:安全
security:
- basicAuth: []
- tokenAuth: []
- apikeyAuth: []
- jwtAuth: []
基本认证:Client ID和Client Secret以Base64编码的授权信息。
Authorization: basic [Bases64编码(‘client_id’:’client_secret’)]
tokenAuth:当指定OpenID Connect或OAuth2的令牌时,这是用于认证的信息。
Authorization: bearer [Token]
apikeyAuth:使用API密钥进行身份验证。
X-API-KEY:[APIKey]
jwtAuth: 这是用于GCP Cloud Endpoint身份验证的认证信息。
Authorization: bearer [Token]
只有在设置了Authorization头并进行调用的情况下才需要指定。解析结果将存储在req.requestContext中。
〇选项标签:x-functype
x-functype: (express|empty|normal|alexa|lambda)
可以指定index.js的调用类型。通常情况下,使用normal,与通过API Gateway调用lambda时的行为相同,但如果想要更改类型,则可以指定。
如果你必须,为了避免遗忘,请按照以下的要求发送多部分文件。
处理〇文件(multipart/form-data)
parameters:
- in: formData
type: file
name: 任意
event.files.upfile[0]中存储接收到的二进制文件。
运行”npm run start”命令会搜索api/controllers/目录下的每个文件夹中的swagger.yaml文件,并自动读取定义的终点,然后启动终点。
另外,当访问 https://localhost:10080/swagger 时,您可以以文本形式获取到Yaml格式的Swagger定义。因此,您可以使用以下类似的Swagger编辑器来可视化端点,并进行试调用。
Swagger-Editor – https://editor.swagger.io/
swagger-api/swagger-editor
https://github.com/swagger-api/swagger-editor
swagger-api / swagger-editor
https://github.com/swagger-api/swagger-editor
请在“文件”⇒“导入URL”的对话框中输入打开的上述URL。
您可以通过运行`npm run swagger`来合并每个文件夹中的swagger.yaml文件并将其输出为api/swagger/swagger.yaml文件。
启动GraphQL服务器
在api/controllers/下创建一个合适的文件夹,然后创建index.js和schema.graphql文件。
在index.js中,我们将按照以下方式获取参数,并根据在schema.graphql中定义的响应返回进行实现。
以下是一些例子。
exports.handler = async(parent, args, context, info) =>{
console.log("args", JSON.stringify(args));
console.log("path", info.path);
return "Hello World";
};
当然,schema.graphql是GraphQL。
※由于尚未实施Subscription,因此写了也无法动作。。。
比如说就是这种感觉。
type Query {
hello(message: String, param: Int): String
}
我們讓用戶能夠透過註解定義選項。
@endpoint注解
schema @endpoint(endpoint: "/mygraphql"){
query: Query,
}
如果添加上述注释,则可以在指定的端点名称上启动GraphQL端点。
在上述示例中,端点将如下所示。
http://localhost:10080/mygraphql :请以中文给出以下句子的同义表达,只需一个选项:
如果没有上述的注释,端点将自动分配如下。
http://localhost:10080/【Folder Name】
@handler注解
type Query @handler(handler: "fulfillment", type: "lambda"){
hello(param1: String, param2: Int): MyModelType
test: [ToDo]
}
一般情况下,调用index.js是以express_graphql的调用形式进行的,但可以使用type: lambda来模拟AWS的AppSync。
通常情况下,我们会以express_graphql的形式来调用index.js,但是如果使用type: lambda的话,可以实现类似AWS的AppSync。
通常情况下,handler的定义是通过调用index.js的exports.hander来实现的,但如果想要更改名称,则需要指定。如果将handler命名为fulfillment,则会调用以下部分。
exports.fulfillment = async(parent, args, context, info) =>{
再者,还有GraphQL浏览器。
当在浏览器中打开http://localhost:10080/graphql时,会显示以下页面。
页面上显示了自动启动的GraphQL文件夹名称。
选择其中一个选项后,将启动以下类型的GraphQL资源浏览器,您可以在此确认GraphQL的Query或Mutation定义,并尝试实际执行。
助手
我们在api/helpers/目录中为连接Alexa Skills、Alexa智能家居、Clova、LINE Bot、Slack、Dialogflow等的便捷助手提供了准备。
可能在未来进行修改,但暂时请参考以下内容。基础环境不是模板环境,而是Swagger-Node环境,但是助手的使用方法是一样的。
使用Swagger在Lambda上创建调试环境。(1)
终结
这个也可以作为参考。试着使用JavaScript的Import和Vue的组件。
以上