jeecms单个栏目调用
毫无疑问,GraphQL是一个了不起的规范。 我从一开始就喜欢它,但是当我开始学习它时,我开始讨厌它,并且在某种程度上我仍然很讨厌,因为我仍在学习它。 太多的样板代码甚至无法启动graphQL服务器。
最近,在进行一个项目时,我需要实现大量的API路由,并且没有使用任何规范,Rest和GraphQL都没有。 但是工作几天后,我遇到了通常的问题,太多的路线定义。
我当时正在考虑解决问题的方法,并且知道GraphQL在那里,但我现在不觉得自己需要那种复杂的API语言。 无论如何,我仍然尝试在我的项目中实现GraphQL,但这花费的时间太长了,也许是因为我是新来的。
我没有花更多的时间在GraphQL上,而是做了一个简单的函数来复制GraphQL引擎的基本功能。 现在,我可以像GraphQL一样在同一个API调用中调用多个操作,但只需几行代码。 当然,我的小代码无法与GraphQL竞争,因为它是为大型应用程序和企业开发的。 更具体地说,是公开其API的服务。
我现在正在使用Laravel,但是可以将其转换为任何Framework或仅转换为Basic PHP,
1.为API定义一个入口点
Route::post(&#39;/run&#39; , function (Request $request) {$response &#61; [];$operations &#61; $request->operations;if (count($operations) <&#61; 0 ) {return response()->json([ "data" &#61;> $response]);}foreach ($operations as $operation) {$className &#61; $operation[ &#39;name&#39; ];$classPath &#61; "App\\Operations\\$className" . "Operation" ;$variables &#61; $operation[ &#39;variables&#39; ] ?? [];if (class_exists($classPath)) {$response[$className] &#61; ( new $classPath())->run($variables); /* run() method will always return an array which is then saved into the $response variable with the OperationName as its key */} else {$response[$className] &#61; [];}}return response()->json([ "data" &#61;> $response]);
});
2.创建操作
上面的代码简单地一个接一个地调用从API调用的操作&#xff0c;并运行为每个操作分别定义的操作文件。
为此&#xff0c;您需要首先创建一个目录来存储所有操作&#xff0c;我的目录位于App \ Operations&#xff0c;并且此目录内的所有文件名都以Operation关键字作为后缀。
操作界面
interface Operation
{public function run ($variables &#61; []) ;
}
一个操作类的例子
class ExampleOperation
{public function run ($variables &#61; []) {// do your stuff here// return the response}
}
3.从API调用操作
在这种情况下&#xff0c;VaultBalanceOperation不存在&#xff0c;因此它返回一个空数组。
我知道这不是一个完美的实现。 我不太喜欢设计模式和花哨的东西。 我只是有一个问题&#xff0c;我试图解决它。 如果要使用GraphQL&#xff0c;请不要将其与GraphQL进行比较。
这不支持请求特定字段之类的功能&#xff0c;但我正在考虑。 我有一些想法&#xff0c;看看是否可行。
对此有任何疑问或讨论&#xff0c;请在下面评论。
结论
现在&#xff0c;这个简单的实现在单个API调用中支持多个资源获取&#xff0c;这在性能方面非常好。 您还可以在每个操作中传递变量&#xff08;用于登录操作中的分页或用户名/密码&#xff09;。 上面的示例使用的是我在项目中所做的一些Laravel内容&#xff0c;但是可以轻松地在任何PHP应用程序或框架中使用&#xff08;注释&#xff0c;如果想学习如何使用的话&#xff09;。 将来&#xff0c;我想通过提及字段和关系来添加一个选项&#xff0c;仅请求我们需要的数据。
跟随我以了解有关我在日常生活中尝试和做的事情的更多信息。
翻译自: https://hackernoon.com/improve-app-performance-by-fetching-multiple-resources-in-a-single-api-call-z01b132ay
jeecms单个栏目调用