将业务逻辑集成到DreamFactory api

DreamFactory生成api的工作做得很好为各种数据源,包括Microsoft SQL Server, MySQL, SFTP, AWS S3等等。生成的API端点包含大部分的功能预计客户要求与数据源交互。然而,软件很少可以用千篇一律的方式创建,因为没有两个公司或项目是相同的。因此DreamFactory提供开发人员修改API端点的能力逻辑使用脚本引擎。

脚本引擎也可以用来创建独立的api。这是特别有用,当不存在本地或第三方API与数据源进行交互。例如您可能想要创建一个API能够将CSV文件转换为一个JSON流,或者您可能希望使用一个Python包创建一个机面向学习的API。这样的任务可以完成脚本引擎。

在这一章中,您将了解如何扩展现有的api和使用脚本引擎创建独立的api。最后,本章也有一节解释如何配置DreamFactory API请求的调度器。首先让我们回顾一下DreamFactory脚本引擎的支持。

支持脚本引擎

DreamFactory目前支持四个脚本引擎,包括:

  • PHP:PHP是世界上最受欢迎的服务器端web开发语言。
  • Python:Python是一种流行的和多方面的语言有许多不同的应用程序,包括人工智能、后端web开发和数据分析。两个版本2和3的支持。
  • node . js:节点。js是一个JavaScript运行时建立在Chrome的V8 JavaScript引擎。

记住这些不是阻碍或不完整版本的脚本引擎。DreamFactory结合工作实际的语言翻译安装在服务器上,并允许您导入第三方库和包到您的脚本环境。

配置Python 3

DreamFactory 3.0添加了支持Python 3由于Python 2。X正式被退休2020年1月1日。记住DreamFactory Python 2集成还没有消失!我们只是想为用户提供足够的时间来开始升级脚本使用Python 3如果是理想的。

Python 3脚本支持将自动可用在所有DreamFactory 3实例。然而,有一个重要的配置更改,新的和升级用户必须考虑为了Python 3脚本正常运行。而取决于DreamFactory Python 2支持,很多不支持Python 3所以叉子的包蒙克必须使用。

你会安装通过Python的咀嚼皮普包管理器。皮普的Python 3-specific版本称为pip3应该用于安装。如果您的服务器已经不包括pip3(找出通过执行这pip3),您可以使用您的服务器安装操作系统的包管理器。例如在Ubuntu上可以安装它是这样的:

美元apt-get安装- y -允许匿名python3-pip

pip3安装,您可以安装蒙克:

美元pip3安装蒙克

一旦安装完毕,你需要更新你的.env文件(或服务器环境变量)指Python 3翻译:

DF_PYTHON3_PATH = / usr /地方/ bin / python3

你可以找到Python 3翻译路径通过执行这个命令:

这python3美元

保存这些更改之后,重新启动PHP-FPM和Apache / Nginx服务。

万博手机登录平台资源可用于脚本

当执行一个脚本,DreamFactory经过两个非常有用的资源,可以让每个脚本访问系统的很多部分包括系统的状态,配置,甚至调用其他服万博手机登录平台务或外部api的一种手段。他们是事件资源和平台资源。

注意:这里的“资源”一词通常用来,基于所使用的脚本语言,资源可以是一个对象(例如node . js)或数组(例如PHP)。

活动资源

事件资源包含结构化数据的事件触发(事件脚本)或从API服务调用脚本(服务)。正如下面所看到的,这包括请求和响应信息这一“事件”。

注:由事件触发脚本的类型,这个事件的部分资源是可写的。修改这个资源在执行脚本不会导致改变资源(请求或响应)进一步内部处理API调用,除非事件脚本配置allow_event_modification设置为true,或是一个脚本服务的响应。2.1.2之前,allow_event_modification content_changed元素是通过设置在请求或响应对象为true。

事件资源具有以下属性:

财产 类型 描述
请求 资源 资源代表入站REST API调用,即HTTP请求。
响应 资源 资源代表一个入站REST API调用的响应,即HTTP响应。
资源 字符串 任何额外的资源名通常表示为一个可替换的路径的一部分,即“表名”在db / _table /{表}调用。

事件请求

请求资源包含的所有组件的原始HTTP请求。这总是可用的资源,在预处理可写事件脚本。

财产 类型 描述
api_version 字符串 使用的API版本请求(例如2.0)。
方法 字符串 请求的HTTP方法(比如GET、POST、PUT)。
参数 资源 对象/数组的查询字符串参数收到请求,参数名称索引。
资源 从请求对象/数组的HTTP头信息,由小写字母索引标题名称。包括内容长度、内容类型、用户代理、授权和主机。
内容 字符串 请求的身体在原始字符串格式。
content_type 字符串 格式类型(例如“application / json)请求的原始内容。
有效载荷 资源 身体(身体)的请求,即内容,转换为内部可用的对象/数组,如果可能的话。
uri 字符串 资源路径,即/ api / v2 / php。
服务 字符串 nodejs服务的类型,例如php, python。

请注意任何允许更改这些数据会覆盖现有的数据请求,在进一步调用侦听器和/或请求之前是由被调用的服务。

检索一个请求参数

检索一个请求参数使用PHP,您将参数名称通过引用它美元的事件(“请求”)(“参数”)关联数组:

/ / PHP customerKey =美元事件(“请求”)(“参数”)(“customer_key”);

检索滤波器参数,引用过滤器关键:

/ / PHP过滤器=美元事件(“请求”)(“参数”)(“过滤器”)

这将返回键/值对,如“id = 50”。因此你想要使用一个字符串解析PHP的爆炸()来检索等功能键值:

/ / PHP $ id =爆炸(" = ",$事件(“请求”)(“参数”)(“过滤器”))[1];

检索一个头的值:

/ / Python请求=事件。请求print request.headers['x-dreamfactory-api-key']

事件响应

响应资源包含数据被发送回客户机的请求。

注意:这个资源只能/相关后处理事件和脚本服务脚本。

财产 类型 描述
status_code 整数 响应的HTTP状态代码(例如200、404、500等)。
资源 对象/数组的HTTP头回客户机的响应。
内容 混合 请求的主体为对象,如果没有设置content_type,或原始字符串格式。
content_type 字符串 的内容类型(json)请求的原始内容。

平台资源

平台资源可以用来访问配置和系统的状态,以及通过内联调用REST API的实例。这使得内部请求直接不需要HTTP调用其他服务。

平台资源具有以下属性:

财产 类型 描述
api 资源 一个数组/对象允许访问实例的REST API。
配置 资源 组成的数组/对象实例的当前配置。
会话 资源 一个数组/对象组成的当前会话信息。

平台API

api资源包含的方法例如API访问。这个对象包含一个方法为每个类型的动词。

函数 描述
得到 得到一个资源
帖子 发布一个资源
把一个资源
补丁 补丁资源
删除 删除一个资源

他们都可以接受相同的参数:

方法(“服务[/ resource_path]”(负载[选项]]);

上述的故障:

财产 是必需的 描述
方法 真正的 上面列出的方法/动词。
服务 真正的 服务名称(如用于API调用)或外部URI。
resource_path 可选 万博手机登录平台资源服务的调用。
有效载荷 可选 必须包含一个有效的对象的语言脚本。
选项 可选 可能包含标题、查询参数和旋度的选择。

没有调用内部只需要相对URL/ api / v2 /部分。你可以通过绝对url http://example.com/my_api这些方法来访问外部资源。万博手机登录平台看到脚本教程更多的例子调用平台。从脚本api方法。

node . js平台APIExample

var url =“db / _table /接触”;var选项=零;platform.api。得到(url, options, function(body, response) { var result = JSON.parse(body); console.log(result); });

PHP平台API的例子

$ url =“db / _table /接触”;= $ $ api平台(“api”);$ = $ api - >得到;结果=得到美元($ url);var_dump()美元的结果);

Python平台API的例子

url = db / _table /接触的结果= platform.api.get (url) data = result.read()打印数据jsonData = bunchify (json.loads(数据)

平台配置

配置对象包含实例的配置设置。

函数 描述
df 配置设置特定于DreamFactory包含但不限于版本,api_version, always_wrap_resources resources_wrapper, storage_path。万博手机登录平台

平台会话

函数 描述
api_key DreamFactory API键。
session_token 会话令牌,即JWT。
用户 用户信息来源于提供的会话令牌,即JWT。包括display_name first_name、last_name、电子邮件、is_sys_admin, last_login_date
应用程序 应用信息来源于提供的API密钥。
查找 查找会话可用。

添加HTTP头信息,查询参数,或旋度选项API调用

您可以指定标题和查询参数的任意组合当调用平台。从脚本api函数。这是支持的所有脚本类型使用选项论点。

node . js

var url = ' http://example.com/my_api ';var载荷={“名称”:“测试”};var选项={“标题”:{“内容类型”:“application / json”},“参数”:{“api_key”:“my_api_key”},};platform.api。帖子(url, payload, options, function(body, response) { var result = JSON.parse(body); console.log(result); }

PHP

$ url = ' http://example.com/my_api ';$载荷= json_decode(“{\“\”: \“测试\“}”,真正的);选择美元= [];$选择['标题']= [];美元的选项(“标题”)(“内容类型”)=“application / json”;$选择[“参数”]= [];选择美元[“参数”][' api_key '] =“my_api_key”;= $ $ api平台(“api”);$ = $ api后- >发布;结果=美元后(url,载荷美元,美元选项); var_dump($result);

Python

url = ' http://example.com/my_api '载荷= '{\“\”:\“测试\“}”选项={}选项(“标题”)={}选项(“标题”)(“内容类型”)=“application / json”选项(“参数”)={}选项(“参数”)[' api_key '] = = platform.api my_api_key的结果。帖子(url、有效载荷、期权)数据= result.read()打印数据jsonData = bunchify (json.loads(数据)

PHP脚本,使用cURL来调用外部url,您还可以指定任意数量的旋度的选择。调用内部url不使用卷发,所以旋度选项没有影响。

/ / PHP选择美元= [];$选择['标题']= [];美元的选项(“标题”)(“内容类型”)=“application / json”;$选择[“参数”]= [];选择美元[“参数”][' api_key '] =“my_api_key”;$选择[' CURLOPT_USERNAME '] =“user@example.com”;$选择[' CURLOPT_PASSWORD '] =“password123”;

旋度选项可以使用CURLOPT_HTTPHEADER包括HTTP头信息,但它是推荐使用美元选项(“标题”)为PHP发送标题如上所示。

修改现有的API端点逻辑

脚本编程接口是通过访问脚本标签位于顶部的DreamFactory管理控制台。一旦进入,你会看到一个列表api内举办DreamFactory实例。输入的一个API,你会看到一个顶级的总结端点分支相关的API。例如,如果你输入一个数据库支持的API,您将看到树枝等_func(存储功能),_proc(存储过程),_schema(表结构)_table(表)。例如,这张截图展示了顶级Microsoft SQL Server API接口:

如果你一直钻入分支,你会发现可以将逻辑应用到一个特定的端点。此外,你可以选择有选择地应用逻辑请求(预处理)或响应(后处理)API的工作流程,可以为执行队列逻辑之外的工作流,并可以指定逻辑与执行一个特定的HTTP动词(GET、POST、等等)。我们稍后会详细讨论这些关键功能的章节。

如果你继续下钻到一个特定的端点,最终你会到达脚本编辑界面。例如在以下截图我们导航到一个SQL Server API客户表端点。具体来说,该脚本将只有当执行得到请求这个端点,并将火已经从数据源返回的数据。

虽然基本的脚本编辑器是好简单的脚本,您可能需要使用源代码控制管理更复杂的脚本。后配置一个源代码控制API使用本机源代码控制连接器(GitHub, BitBucket都和GitLab都支持),你就可以链接到一个脚本通过通过选择所需的API链接到一个服务选择框位于界面的左下角显示在上面的截图。

例子

让我们回顾一些脚本的例子,让自己别老想着比赛关于什么是可能的。

验证输入参数

你将新记录插入数据库的时候自然会首先想验证输入参数。这样做你会添加一个pre_process事件处理程序的目标表帖子方法端点。例如,如果API名称空间mysql,目标表员工,你将添加脚本逻辑mysql._table.account.post.pre_process端点。这是一个基于php的例子探讨了帖子有效载荷为缺失值也证实salary-related参数大于0:

有效载荷=美元事件(“请求”)(“有效载荷”);如果(!空($负载['资源'])){foreach(有效载荷('资源']美元记录){如果!array_key_exists (first_name、记录)美元){抛出新\异常('失踪first_name。');如果(}!array_key_exists (hire_date,记录美元)){抛出新\异常('失踪hire_date。');}如果($记录(“工资”)< = 0){抛出新\异常(年薪必须> 0);}}}

把一个响应

假设数据源API返回响应不符合目标客户。也许客户期望响应参数命名的不同,或者一些额外的嵌套应该发生。为此,您可以添加业务逻辑post_process端点。例如,修改响应被返回的示例MySQL数据库的API员工表端点,您将添加一个脚本mysql._table.employees.get.post_process。作为一个例子,这是一个记录从默认响应的样子:

{“列出”:10001年,“birth_date”:“1953-09-02”,“first_name”:“格奥尔基”、“last_name”:“Facello”、“性别”:“M”,“hire_date”:“1986-06-26”}

假设您希望它看起来像这样:

{“列出”:10001年,“birth_date”:“1953-09-02”、“名称”:“格奥尔基Facello”、“性别”:“M”}

具体来说,我们结合了first_namelast_name参数,并删除了hire_date参数。要实现这一点,你可以添加下面的PHP脚本mysql._table.employees.get.post_process端点:

responseBody =美元事件(“响应”)(“内容”);foreach ($ responseBody['资源']n = >记录美元){$记录(“名字”)= $记录(“first_name”)。“”。美元的记录(“last_name”);设置($记录(first_name "));设置($记录(last_name "));设置($记录(hire_date "));$ responseBody['资源'][$ n] = $记录;}$事件(“响应”)(“内容”)= $ responseBody;

停止脚本执行

就像在正常代码执行,执行一个脚本过早停止由两个手段,抛出异常,或返回。

/ /停止执行如果动词除了用于自定义脚本服务(event.request。方法! = =“获得”){扔”这个端点只允许HTTP GET。”;/ /将导致500年回到客户给定的消息。}/ /停止执行并返回一个特定的状态代码如果(事件。资源! = =“测试”){/ /预处理脚本事件的地方。反应还不存在,就创建它。响应= {};/ / event.response只是更新后处理脚本成员必要的。status_code = 400;event.response。内容= {"error": "Invalid resource requested."}; return; } // defaults to 200 status code event.response.content = {"test": "value"};

抛出异常

如果一个参数,如过滤器丢失,可以抛出一个异常如下:

/ / PHP如果!array_key_exists(美元“过滤器”,事件(“请求”)(“参数”))){抛出新的核心\异常\ \ DreamFactory \ BadRequestException(“失踪的过滤器”);}

创建独立的脚本化的服务

创建一个独立的脚本化的服务,你会导航到服务>创建然后单击选择服务类型下拉。你会发现有一个脚本服务类型脚本,在这你会发现支持的脚本引擎的链接语言(PHP、Python和NodeJS):

选择你想要的语言后会提示提供通常的名称空间,标记,和描述的API。单击下一个按钮,你会看到一个简单的文本编辑器。你免费尝试通过编写脚本在这个编辑器,或者可以使用链接到一个服务选择参考脚本存储在文件系统中,或在一个存储库。请记住您首先需要配置源代码控制或文件API为了包含在链接到一个服务下拉。

除了充分利用脚本语言的语法,还可以使用特殊的数据结构和功能DreamFactory注入到脚本环境中。例如,您可以使用监听请求的方法美元的事件(“请求”)(“法”)数组的值。例如尝试将下面的代码添加到脚本服务:

如果($事件(“请求”)(“法”)= =“POST”) {dd (“POST请求!”);}elseif(美元事件(“请求”)(“法”)= =“获得”){dd (“GET请求!”);}

保存更改,然后试着联系的服务端点得到帖子方法。的dd ()函数将每个各自的条件块火。

对于更复杂的路由需求,我们建议利用许多OSS路由库之一。例如bramus /路由器PHP提供了一个轻量级的路由方案,可以很容易地添加到DreamFactory(参见下一节“使用第三方库”)。一旦加入,你将能够创建复杂的脚本服务路由解决方案,比如:

set_include_path (“/ home / dreamfactory /库”);require_once (“CustomResponse.php”);路由器美元= new \ Bramus \路由器\路由器();$ = new \ DreamFactory \ CustomResponse反应();$路由器- >(‘得到’、‘/之前。*’,函数(){头(“X-Powered-By: bramus /路由器”);});路由器- > get(' /美元。*’,()函数使用(响应){$响应- > setContent(“你好世界路由器!”);}); $router->set404(function() { header('HTTP/1.1 404 Not Found'); $response->setContent('404 not found'); }); $router->run(); return $response->getContent();

独立的脚本例子服务

使表端点(PHP)

这个脚本可以使表端点更简洁的端点。例如,您可能想要改变service_name _table /员工只是exployees

脚本粘贴到PHP脚本服务和改变api_path变量_table /服务/表你想混淆视听。保存服务。现在可以使用标准的DreamFactory表记录API程序,除了端点缩短。

< ?php / /设置平台与快捷键对象,每个动词api =美元平台(“api”);$ = $ api - >得到;$ = $ api后- >发布;把美元= $ api - >把;补丁美元= $ api - >补丁;$ = $ api - >删除删除;美元api_path = ' db / _table / todo ';/ /服务/ _table /表你想混淆方法=美元事件(“请求”)(“法”);/ /获取HTTP方法选项(“参数”)=美元事件(“请求”)(“参数”); // copy params from the request to the options object // if there are additional resources in the request path add them to our request path if ( $event['resource'] && $event['resource'] != '' ) { $api_path = $api_path . '/' . $event['resource']; } if ( $event['request']['payload'] ) { // if the payload is not empty assign it to the payload var $payload = $event['request']['payload']; } else { //else make the payload null $payload = null; } switch ( $method ) { // Determine which verb to use when making our api call case 'GET': $result = $get ( $api_path, $payload, $options ); break; case 'POST': $result = $post ( $api_path, $payload, $options ); break; case 'PUT': $result = $put ( $api_path, $payload, $options ); break; case 'PATCH': $result = $patch ( $api_path, $payload, $options ); break; case 'DELETE': $result = $delete ( $api_path, $payload, $options ); break; default: $result['message'] = 'Invalid verb.'; break; } return $result; // return the data response to the client ?>

使用第三方库

正如前面所提到的在这一章,DreamFactory通过脚本在设计安装在服务器上的脚本语言。这意味着您不仅可以访问所有的脚本语言的语法(相对于一些缩减版),而且语言社区的第三方包和库!

添加一个作曲家包

DreamFactory是PHP语言之上构建的,并使用作曲家安装和管理的内部构建和使用整个平台的第三方包。如果你想利用一个作曲家在您的脚本包,安装它在全球范围内使用全球修饰符。例如,假设您想要发送的一条微博一个脚本。您可以使用twitteroauth包这样做:

美元的全球需要亚伯拉罕/ twitteroauth作曲家

安装之后,您可以使用包内DreamFactory脚本通过它的名称空间中演示了下面的例子:

$ consumerKey = env (“TWITTER_CONSUMER_KEY”);$ consumerSecret = env (“TWITTER_CONSUMER_SECRET”);$ oauthToken = env (“TWITTER_OAUTH_TOKEN”);$ oauthSecret = env (“TWITTER_OAUTH_SECRET”);亚伯拉罕连接= new \ \ TwitterOAuth \ TwitterOAuth美元($ consumerKey consumerSecret美元oauthToken美元,美元oauthSecret);如果($事件(“请求”)(“法”)= =“POST”){美元消息= $事件(“请求”)(“有效载荷”)['资源'][0](“信息”);= $ $响应连接- > post(“状态/更新”,[“地位”= >美元消息]);}返回json_encode([“响应”= > $响应]);

添加一个PHP类库

如果你想自定义代码重用脚本,并不想管理代码在一个作曲家包,你可以另外添加类使用PHP的包括路径set_include_path ()函数。包括之后,您可以使用require_once语句导入类。这种方法是在以下示例脚本:

set_include_path (“/ home / wjgilmore /库”);require_once (“Filter.php”);美元过滤器= new \ WJGilmore \验证\ Validate ();尝试{$过滤器- >用户名(“dreamfactory”);}捕获异常(\ $ e){$事件[“响应”]= [status_code = > 400,“内容”= >['成功' = >假,“消息”= > $ e - > getMessage ()));}

被引用的过滤器类中发现一个文件命名Filter.php和看起来像这样:

< ?php名称空间WJGilmore \验证;使用异常;类验证{公共职能的用户名($ username){如果(preg_match (" / ^ a-zA-Z0-9 \ s *美元/”,用户名)美元! = 1){抛出新的异常(“用户名必须是字母数字。”);}返回true;}}

如果你想永久特定的目录添加到PHP的包括路径、修改包含路径配置指令。

排队脚本设置

DreamFactory排队脚本利用Laravel内置的排队功能,更详细的信息,请参阅文档在这里。每个DreamFactory实例时已经设置“数据库”队列设置创建所有必要的表(脚本和failed_scripts)。存储在队列配置文件配置/ queue.php可以更新,如果另一个设置是首选,如Beanstalkd,Amazon SQS,或复述,

DreamFactory也完全支持以下工匠命令配置和运行时执行:

队列:列出所有失败的队列脚本队列失败:冲洗冲洗所有的队列脚本队列失败:忘记删除队列脚本队列失败:听一听一个给定队列的队列:重启重启队列当前脚本后工人守护进程队列:重试失败重试队列脚本队列:工作流程上的下一个脚本一个队列

指定队列

你也可以指定队列应该发送到一个脚本。通过脚本不同的队列,你可能分类排队脚本,甚至优先考虑有多少工人分配到不同的队列。这并不是推动您的队列定义的脚本不同的队列连接配置文件,但只有在单个连接特定队列。指定队列,使用队列配置选项在脚本或服务。

指定队列连接

如果您是使用多个队列连接,你可以指定哪个连接推动一个脚本。指定连接,使用上的连接配置选项脚本或服务。

延迟的脚本

有时候,您可能希望推迟排队脚本的执行一段时间。例如,您可能希望队列发送客户提醒邮件的脚本注册后5分钟。你可以完成这个使用延迟配置选项在你的脚本或服务。选项的值应该在几秒钟内。

运行队列监听器

启动队列监听器

Laravel包括一个工匠命令将运行新脚本被推到队列中。你可以运行侦听器使用队列:听命令:

php工匠队列:听

你也可以指定哪个队列连接监听器应该使用:

php工匠队列:连接名听

注意,一旦这个任务已经开始,它将继续运行,直到手动停止。你可以使用一个过程监控等主管确保队列侦听器不会停止运行。

队列优先级

你可以通过队列连接听的逗号分隔列表脚本设置队列优先级:

php工匠队列:听着——队列=高,低

在本例中,脚本的队列总是被处理之前的脚本队列中。

指定脚本超时参数

你也可以设置的时间长度(以秒为单位)应该允许每个脚本运行:

php工匠队列:听——timeout = 60

指定队列睡眠时间

此外,您可以指定的秒数轮询之前等待新的脚本:

php工匠队列:听——睡眠= 5

注意,队列只睡如果没有队列上的脚本。如果更多的脚本可用,队列将继续他们没有睡觉。

处理队列中的第一个脚本

处理队列上的只有第一个脚本,您可以使用队列:工作命令:

php工匠队列:工作

处理失败的脚本

指定的最大数量乘以一个脚本应该尝试,你可以使用——试开关的队列:听命令:

php工匠队列:听连接名——= 3

脚本已经超过这个数量的尝试后,它将插入到failed_jobs表。

重试失败的脚本

查看你所有的脚本已经插入你的失败failed_jobs数据库表,你可以使用队列:失败工匠命令:

php工匠队列:失败了

队列:失败脚本命令将列出ID、连接队列,和失败。脚本ID可用于重试失败的脚本。例如,重试失败的脚本,它有一个ID,应该发出以下命令:

php工匠队列:重试5

重试失败你所有的脚本,使用队列:重试所有ID:

php工匠队列:重试

如果你想删除一个失败的脚本,您可以使用队列:忘记命令:

php工匠队列:忘记5

删除你的所有失败的脚本,您可以使用队列:命令:

php工匠队列:冲洗

计划任务

DreamFactory本地不支持预定的任务但是你可以设置CRON作业来实现此目的。让我们创建一个示例调用API的每一分钟。

创建脚本

首先,我们将创建的脚本调用的API。一个简单的方法是导航到API文档选项卡并复制cURL命令适当的我们想打电话。在本例中,我们使用业务逻辑得到_table /员工这是之间的数据同步两个数据库

一旦我们cURL命令我们可以将它转换为PHP使用这个有用的工具。之后,我们将创建一个文件命名cron公共文件夹包含生成的PHP代码。

运行CRON作业

开始我们定义CRON作业参数:

* * * * * /usr/bin/php / opt / dreamfactory /公共/ cron。php > / dev / null 2 > & 1

这可以分为4部分,时间、执行PHP脚本路径,输出。在这个例子中,* * * * *意味着它将每分钟运行一次。第二部分是PHP的路径允许它被执行。重要的是现在提供的完整路径文件你想跑。最后你可以写输出到一个文件或丢弃它,在这种情况下我被丢弃。如果你想了解更多关于结构,看看这个文章

接下来,您需要编辑定时任务通过运行以下:

美元crontab - e

你将进入文本编辑器,你可以简单地粘贴在你的CRON作业并保存它。现在你有一个计划任务运行每一分钟你的API调用!

示例脚本

本节包含PHP示例脚本,Python, NodeJS。额外的例子请参考这些资源:万博手机登录平台

NodeJS定制日志

这个脚本监控使用一个特定的服务,历史保存在一个数据库表中。每次在一个API调用端点,写事务细节到一个“TransactionHistory”表。记录用户名,应用程序API密匙和时间戳。

/ /启用节点。js脚本,设置路径中节点DreamFactory .env文件。/ /默认这个设置被注释掉了。/ / / / DF_NODEJS_PATH = / usr /地方/ / / / / bin /节点使用npm安装任何依赖项。这个脚本需要lodash。/ /你的脚本可以叫控制台。将信息记录到日志文件中存储/日志。var载荷= {user_name: platform.session.user。电子邮件、api_key: platform.session。api_key,timestamp: (new Date()).toString() }; platform.api.post("db/_table/TransactionHistory", {"resource": [payload]}, '', function(body, response){ console.log(response.statusCode + " " + response.statusMessage); event.setResponse(JSON.parse(body), response.statusCode, 'applicaton/json'); });

PHP动态授权头

这个PHP脚本检索一个特定服务的配置细节和修改授权标头。它可以是非常有用的一个脚本自动为你这样做如果你保持旋转密码的很多服务。的randomNum美元变量甚至可以替换为一个独立API调用的OAuth例如端点返回JWT服务进行身份验证。最后这个脚本可以被附加到我们的调度程序自动运行这个脚本的功能,以确保你总是经过身份验证的。

/ /配置变量$ url =“系统/服务/ < service_id >”;= $ $ api平台(“api”);$ = $ api - >得到;选择美元= [];$ randomNum =兰德(1000000000000,1000000000000);/ /检索服务细节要求=得到美元($ url);configAuth =称美元(“内容”);/ /设置服务的新Auth头configAuth美元(“配置”)(“选项”)=“abc”。randomNum美元;/ /设置负载有新的Auth头载荷= configAuth美元;/ /执行一个补丁来取代之前的身份验证服务的头postURL美元=“系统/服务”; $patch = $api->patch; $result = $patch($url, $payload, $options); return $result;

更多的信息

我们仍然在迁移的过程中脚本文档指南,所以目前关于脚本的更多信息请参考我们的维基:

Baidu
map