Dart Functions Framework usage



我是Dart函数框架的新手。我的目标是使用这个包创建几个函数并将它们部署到Cloud Run(与Firebase结合,但我想这与这个问题无关)。

我已经运行了快速启动并阅读了文档中的所有内容。

快速入门一次只提到一个函数(例如Hello World,Cloud Events等),如下所示:

import 'package:functions_framework/functions_framework.dart';
import 'package:shelf/shelf.dart';
@CloudFunction()
Response function(Request request) {
return Response.ok('Hello, World!');
}

但是正如你在快速入门中看到的,在一个项目中一次只处理一个函数。如果我想部署几个功能呢?我应该:

  1. 在同一个项目/文件中编写多个函数,以便函数框架编译'server '。

  1. 为每个功能创建一个不同的functions_framework?

让我说得更具体些。我应该这样做吗(选项1 -这对我来说更有意义):

import 'dart:math';
import 'package:functions_framework/functions_framework.dart';
import 'package:shelf/shelf.dart';
@CloudFunction()
Response function(Request request) {
return Response.ok('Hello, World!');
}
@CloudFunction()
Response function2(Request request) {
if (Random().nextBool()) {
return Response.ok('Hello, World!');
} else {
return Response.internalServerError();
}
}

或者我应该通过为每个函数运行build_runner来构建一个不同的文件夹,我需要在我的项目中?

是否存在差异和/或最佳实践?提前谢谢。

编辑。这个问题与《Cloud Run》本身的部署有关,而不仅仅是在我自己的PC上进行测试。为了测试我自己的函数,我做了以下操作:

  1. 运行dart run build_runner build,使其正确更新server.dart文件(我可以看到框架在幕后做了很多工作,_nameToFunctionTarget基本上是一个路由器);
  2. 在两个不同的终端上运行服务器,如:dart run bin/server.dart --port MYPORT --target MYFUNCTION(其中MYPORTMYFUNCTION分别为8080/8081function/function2)。

我想我只是对如何正确地管理这个框架感到困惑,一旦部署在Cloud Run上。

编辑2。我放弃了使用Dart作为无服务器语言,甚至是后端语言。即使是最基本的东西也有太多的术语。任何后端框架要么是死的,要么是由一个狂热的家伙维护的(感谢他!)这种语言还没有得到Google团队/社区的足够喜爱,目前基本上不可能只在Dart上实现全栈。这是一个梦想,但现在无法实现。此外,Dart几乎不缺乏适当的sdk来使用Firestore等,因此Firebase不是一个选择。我发现学习NodeJS和利用Firebase对用NodeJS编写的Firebase函数的支持更容易,我将等待未来有更多的支持,如果有的话。

文档现在有点稀疏(而且我也是新手!我找不到任何好的例子,所以在这里…)

  • 您只能有一个功能被服务。应该是命名的'function'(类型和名称可以被重写,参见云事件示例dartfn generate cloudevent)
  • 您"可以"部署许多这些,以便每个人都做特定的事情,例如处理上面的云事件,但大多数人想要更像rest的东西(见下)
  • 你需要附加一个Router(),这样你就可以在你的代码中由特定的逻辑处理单个入口点(函数)。

Rest

示例
  1. 添加到pubspec。yaml (in dependencies:)shelf_router: ^1.1.2
  2. 授权@CloudFunction使用Router()

functions.dart

import 'package:functions_framework/functions_framework.dart';
import 'package:shelf/shelf.dart';
import 'package:shelf_router/shelf_router.dart';
Router app = Router()
..get('/health', (Request request) {
return Response.ok('healthy');
})
..get('/user/<user>', (Request request, String user) {
// fetch the user... (probably return as json)
return Response.ok('hello $user');
})
..post('/user', (Request request) {
// convert request body to json and persist... (probably return as json)
return Response.ok('saved the user');
});
@CloudFunction()
Future<Response> function(Request request) => app.call(request);

相关内容

  • 没有找到相关文章

最新更新