pilskalns/f3-wcurl

cURL 的 F3 封装库,用于与外部 REST API 通信

1.1 2018-10-13 15:37 UTC

This package is auto-updated.

Last update: 2024-09-29 05:20:57 UTC


README

目前,此插件未维护,并且很可能将继续这样。

依赖此插件的项目要么已经过时,要么已经找到其他形式,例如作为 Lambda 函数。

感谢 F3 开发者提供的框架,学习它并构建运行多年的自动化工具很愉快。一旦最后一个运行的项目下线,我将归档此存储库。请随意进行分支。

F3-wcurl

Fat Free Framework 插件:您的代码与外部 REST API 之间的桥梁。F3-wcurl 作为 cURL 的逻辑抽象层,处理身份验证和成功响应缓存。

F3 内置的 Web 插件非常出色且易于处理单个 HTTP 请求。F3-wcurl 在您的代码中构建了整个远程 API 的实现。

前言

随着时间的推移,我需要快速构建工具和脚本,它们具有一个基本但重复的任务:处理 cURL 请求、设置、对象、响应等。最终,我一直在复制相同的函数,修改它们并调试相同的问题 为什么几个月前的东西不工作

尽管您可以对 cURL 选项进行很好的控制和访问,但 F3-wcurl 不会强迫您这样做。它让您专注于请求本身,它改变了什么,并接收什么回报。作为 F3 生态系统中的插件,它自然拥有一些酷炫的依赖项 - PrefabCacheWeb(不针对 cURL 请求本身)。

初始化类

F3 类是由关联数组的相关设置构建的。数组可以直接从代码中传递,或者从 INI 文件(在构建 F3-wcurl 之前导入 F3)中传递,并存储在 F3 集群 中。

F3-wcurl 使用 F3 的 Prefab 和 Cache,这使得相同的 wcurl 对象可以从代码的任何地方调用,并快速响应。

默认情况下,F3-wcurl 将在 F3 集群中搜索 wcurl 键,但 INI 可以方便地存储多个不同 REST API 实现的设置。

$wcurl = \wcurl::instance([$iniName = 'wcurl' | $optionsArray]);

选项数组

这个相当简单的数组结构定义了 wcurl 的内部工作方式

更新选项

setOptions

要设置上表中任何选项,请传递包含一个或多个选项的 key => val 数组。

$wcurl->setOptions(
	[
		'useragent' 	= > 'F3-wcurl API integration',
		'encodeJSON' 	= > false,
		'ttl' 			= > 300,
		// etc
	]
);

只有您传递的选项将被更新,其他一切都将保持之前/默认状态。

clearOptions

要清除一个或多个选项,请传递名称或您希望重置为默认值的键的数组列表

$wcurl->clearOptions([ 'useragent', 'ttl' /*, ... etc */ ]);

getOptions

要获取表示 wcurl 类当前状态的完整选项数组

$wcurl->clearOptions();

返回的多维数组应与创建的数组兼容,以创建完全相同的类。

getStats

将返回自类创建以来执行的请求数量统计、接收的 http 响应数量以及从缓存中服务了多少个响应。

$wcurl->getStats();

HTTP 函数

目前支持的功能有 GET、POST、PUT、PATCH 和 DELETE。尽管如此,随着需要实现它们的需求,将添加更多功能。

GET

$response = $wcurl->get( string $url [, array $fill = null [, array $options = null ]] );

我这样记住参数。

UFO

  • Url - 正确来说应该是 URL 的 PATH,或来自 rests 表的标识符(见下文)。
  • Fill - 填充 rests 路径的值数组
  • Options - 强制为此次请求特别设置任何选项

POST

$response = $wcurl->post( string $url, array $body = null [, array $fill = null [, array $options = null ]] );

UFBO - Url, Fill, Body, Options

PUT

$response = $wcurl->put( string $url, array $body = null [, array $fill = null [, array $options = null ]] );

UFBO - Url, Fill, Body, Options

PATCH

$response = $wcurl->patch( string $url, array $body = null [, array $fill = null [, array $options = null ]] );

UFBO - Url, Fill, Body, Options

DELETE

$response = $wcurl->delete( string $url, array $body = null [, array $fill = null [, array $options = null ]] );

UFBO - Url, Fill, Body, Options

使用REST点(REST points)表

REST点表有两个同等重要的用途

  1. 为了简化API路径,避免长字符串的拼写错误
  2. 填充这些字符串的部分,构建动态API调用路径

在构造长的远程URL路径时,通过简短的关键词更容易记住它们,尤其是如果它们从多个地方调用。例如,使用allmembers而不是/lists/members/all/pages。有时这些还包含独特的参数,每个请求都需要填充。这个概念是此插件存在的主要原因之一。

继续阅读。

设置命名路径

最好的方法是将远程路径存储在.ini配置文件中。要填充的URL变量被两个%包裹。

待办事项:使这个包裹字符可配置。

[wcurl.rests]
allmembers=/lists/members/all/pages
withVariable=/lists/members/%%memberID%%/pages

或者动态传递简单的key => value数组 - 它将被合并到之前的配置中

$wcurl->setOptions(
	'rests' => [
		'allmembers'	=> '/lists/members/all/pages',
		'withVariable'	=> '/lists/members/%%memberID%%/pages',
		'updateEmail'	=> '/lists/members/%%memberID%%/update'
	]
);

使用命名路径

要使用命名路由,传递其名称而不是完整路径

$response = $wcurl->get( 'allmembers' );

这将解析为/lists/members/all/pages

使用带变量的命名路径

$response = $wcurl->get( 'withVariable', array('memberID' => 'abc123ID') );

这将解析为/lists/members/abc123ID/pages

或者在POST请求中我们知道必须传递以下UFBO参数

$wcurl->post('updateEmail', 					// path shorthand to resolve name
			[ 'memberID' =>'abc123ID' ], 		// fill this in the path
			[ 'email'=>'andzs@pilskalns.lv' ] 	// body to send
		);

使用INI配置

如果您将所有配置放入主ini文件中,则类只能在首次需要使用它时初始化。也就是说,当您的代码决定发送get()时。在那个时刻,如果类未在Prefab中注册,则将从INI配置中精确构建所需的内容。

有关选项数组的完整列表,请参阅上方几个滚动选项表。

[wcurl]
root=http://mysite.api/v1
ttl=3600
cb_login=yourClass::cb_do_login
useragent = Zeus was here
headers = "Header: value", "Another-Header: Value"

[wcurl.rests]
allmembers=/lists/members/all/pages
withVariable=/lists/members/%%memberID%%/pages


; Using with multiple API's
[apitwo]
root=http://yoursite.io/v2
ttl=60
useragent = Big Falcon Rocket
[apitwo.rests]
getUsers=/lists/members/all/pages
getOneUser=/lists/members/%%memberID%%/pages

示例

cb_login

$wcurl->setLogin( callback 'yourClass::cb_do_login' );

如果任何请求导致HTTP 401或403代码,wcurl调用登录回调函数,然后重复原始请求。如果再次出错,它将返回到原始函数的结果。wcurl将cookie存储在API根的唯一临时文件中。此cookie文件包含在每个请求中。

回调必须返回true,如果登录成功,否则在认证成功后无法自动重复请求。

注意!如果登录失败,但仍然返回true,它可能导致request->login->request->login...无限循环

登录函数示例

static function cb_do_login(){
	$wcurl = \wcurl::instance();

	$login = $wcurl->post("/login", array(
				'login'=> 'my_user',
				'password'=> 'covfefe' )
			);
	if($login['status']['http_code']==200){
		return true;
	}

	// or
	$wcurl->setOptions( [ 'basicauth' => "$user:$password"]);
}

与多个API一起使用

调用\wcurl::instance()时,它返回单例类,因此在代码的任何地方都使用相同的对象。要强制从类获取新实例,请使用类似的方法

$apiTwo = new wcurl([$iniName | $optionsArray]);

然后可以将$apiTwo存储在F3蜂房中。

还有很多可以改进的地方,但目前将创建我需要的功能。如果您的情况中无法实现某些功能,请提交问题或甚至是PR。感谢F3开发者为这个出色的框架。如果您正在寻找像F3-wcurl这样的东西,但尚未使用它,那么请三思——为什么您还没有开始使用F3?