bluelightco / lever-php
支持Laravel的PHP中非常简单、抽象度最低的Lever DATA API v1包装器。
Requires
- php: ^8.2
- ext-json: *
- graham-campbell/guzzle-factory: ^7.0
- guzzlehttp/guzzle: ^7.8
- illuminate/support: *
- spatie/guzzle-rate-limiter-middleware: ^2.0
Requires (Dev)
- laravel/pint: ^1.16
- orchestra/testbench: ^6.44
- phpunit/phpunit: ^9.6
README
支持Laravel的PHP中非常简单、抽象度最低的Lever DATA API v1包装器。
安装
您可以通过composer安装此包
composer require bluelightco/lever-php
用法
PHP
use \Bluelightco\LeverPhp\Http\Client\LeverClient; $lever = new LeverClient('leverKey'); $lever->opportunities()->fetch();
Laravel
安装后,该包将自动注册其服务提供者。
要发布配置文件到config/lever-php.php,请运行
php artisan vendor:publish --provider="Bluelightco\LeverPhp\Providers\LeverServiceProvider" --tag="config"
在相应地更改您的ENV文件中的API密钥后,您可以按以下方式调用Lever实例
Lever::opportunities()->fetch();
方法
该包基于Lever的数据API文档构建,因此您应该能够找到许多端点的对应方法。
例如,如果您想获取所有机会,只需调用
Lever::opportunities()->fetch();
要检索单个机会,应调用相同的方法,同时传递id作为参数
Lever::opportunities('250d8f03-738a-4bba-a671-8a3d73477145')->fetch();
要创建机会,请使用create方法,同时传递字段数组(使用与Lever相同的名称)
$newOpportunity = [ 'name' => 'Shane Smith', 'headline' => 'Brickly LLC, Vandelay Industries, Inc, Central Perk', 'stage' => '00922a60-7c15-422b-b086-f62000824fd7', ... ]; Lever::opportunities()->create($newOpportunity);
当代表候选人向特定职位提交申请时,应使用以下方法
$application = [ 'customQuestions' => [...], 'personalInformation' => [...], 'ipAddress' => '184.23.195.146', ... ]; Lever::opportunities('730e37db-93d3-4acf-b9de-7cfc397cef1d') ->sendConfirmationEmail() ->apply($application);
当更新端点可用时,您可以按以下方式进行操作
$posting = [ 'text' => 'Infrastructure Engineer', 'state' => 'published', ... ]; Lever::postings('730e37db-93d3-4acf-b9de-7cfc397cef1d') ->performAs('8d49b010-cc6a-4f40-ace5-e86061c677ed') ->update($posting);
请注意,某些资源需要一些参数才能工作。例如,创建职位时,需要perform_as参数。您可以使用performAs($userId)
方法传递此信息。
当资源依赖于另一个资源才能工作时,您可以简单地链式调用方法(顺序很重要)。例如,要检索机会的报价,应执行以下操作
Lever::opportunities('250d8f03-738a-4bba-a671-8a3d73477145')->offers()->fetch();
当Lever请求使用PUT动词时,您可以使用putUpdate()
而不是update()
(POST)。
参数
有许多辅助方法可用于在请求中包含参数。例如,要包含追随者和扩展申请以及阶段,在获取机会时,您可以这样做
Lever::opportunities() ->include('followers') ->expand(['applications', 'stages']) ->expand('posting') ->fetch();
请注意,您可以在两种方法中传递字符串或字符串数组,并且如果您愿意,可以多次链式调用相同的方法。
并非所有参数都有对应的方法,但您可以使用addParameter($field, $value)
方法。此方法可以链式调用而不会覆盖先前值。例如
Lever::opportunities() ->addParameter('origin', 'applied') ->addParameter('posting_id', 'f2f01e16-27f8-4711-a728-7d49499795a0') ->fetch();
请注意,当使用相同的字段名称时,新值将被附加而不是覆盖。
上传文件和简历
LeverPhp允许您在可用时包含简历或文件。为此,您必须将文件包含在字段数组中(请参阅示例)并链式调用hasFiles()
方法(在create
或update
方法之前!)例如,在创建机会时可以附加简历
$newOpportunity = [ 'name' => 'Shane Smith', 'headline' => 'Brickly LLC, Vandelay Industries, Inc, Central Perk', 'resumeFile' => [ 'file' => file_get_contents('path/to/resume.pdf'), 'name' => 'resume.pdf' 'type' => mime_content_type('path/to/resume.pdf'), // application/pdf ] ]; Lever::opportunities()->hasFiles()->create($newOpportunity);
目前,不支持在一次调用中上传多个文件。
分页
所有具有列表端点(候选人、用户、职位)的Lever资源都具有分页功能,每页最多100个结果。LeverPhp通过利用Laravel LazyCollection类自动处理此功能。例如,您可以遍历整个机会集,而无需担心分页
$opportunities = Lever::opportunities()->fetch(); foreach ($opportunities as $opportunity) { echo $opportunity['name]; }
当达到第100个项目时,将向API发出另一个调用,请求下一批100个项目,直到没有更多为止。
当然,您可以充分利用LazyCollection类上所有可用的方法。
速率限制和指数退避
默认情况下,Lever API允许每个API密钥每秒10个请求的稳定状态。
为了遵守这一规定,LeverPhp自动将向Lever Data API的请求数量限制为每秒10个,并在收到429或500响应时使用指数退避来降低重试率。请相应地规划您的代码,因为请求可能比预期耗时更长。建议使用某种类型的队列。
默认情况下,速率限制器在内存中工作。这意味着如果您有第二个PHP进程(或Guzzle客户端)正在消耗相同的API,您仍然可能遇到速率限制。
LeverPhp()
构造函数接受一个自定义存储作为其第三个参数以克服内存问题。如果您正在使用Laravel,使用您的缓存驱动程序的自定义存储已经配置好了。如果您需要更多信息,请参阅GuzzleRateLimiterMiddleware的文档。
客户端
如果您尝试访问的资源没有可用方法,您可以通过调用Lever::client()
直接获取Guzzle客户端的实例。请随意将其添加到源代码中。有关详细信息,请参阅CONTRIBUTING。
测试
composer test
变更日志
请参阅CHANGELOG以获取有关最近更改的更多信息。
贡献
请参阅CONTRIBUTING以获取详细信息。
安全
如果您发现任何安全相关的问题,请通过电子邮件dev@via.work而不是使用问题跟踪器。
鸣谢
许可证
MIT许可证(MIT)。有关更多信息,请参阅许可证文件。