via-work / lever-php
PHP中超级简单的Lever DATA API v1包装器,支持Laravel。
Requires
- php: ^7.3
- ext-json: *
- graham-campbell/guzzle-factory: ^4.0
- guzzlehttp/guzzle: ^7.2
- illuminate/support: ^8.0
- spatie/guzzle-rate-limiter-middleware: ^2.0
Requires (Dev)
- orchestra/testbench: ^6.0
- phpunit/phpunit: ^9.0
README
PHP中超级简单的Lever Data API v1包装器,支持Laravel。
安装
您可以通过composer安装此包
composer require via-work/lever-php
使用
PHP
use \ViaWork\LeverPhp\LeverPhp; $lever = new LeverPhp('leverKey'); $lever->opportunities()->fetch();
Laravel
安装后,包将自动注册其服务提供者。
要发布配置文件到config/lever-php.php,运行
php artisan vendor:publish --provider="ViaWork\LeverPhp\LeverPhpServiceProvider"
在相应地更改您的ENV文件中的API密钥后,您可以使用以下方式调用Lever实例
Lever::opportunities()->fetch();
方法
此包是根据Lever的数据API文档设计的,因此您应该能够找到许多端点的方法。
例如,如果您想获取所有机会,您只需调用
Lever::opportunities()->fetch();
要获取单个机会,您应该在传递id作为参数时调用相同的方法
Lever::opportunities('250d8f03-738a-4bba-a671-8a3d73477145')->fetch();
要创建机会,请使用创建方法并传递字段数组(使用与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)。
参数
有许多辅助方法可用于在请求中包含参数。例如,要包括 followers 和 展开应用程序 以及 阶段,在获取机会时,您可以这样做
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数据API的请求数量限制为每秒10个,并在接收到429或500响应时使用 指数退避 来降低重试频率。请相应地规划您的代码,因为请求可能比预期花费更长的时间。建议使用某种类型的队列。
默认情况下,速率限制器在内存中工作。这意味着如果您有第二个PHP进程(或Guzzle客户端)使用相同的API,您仍然可能会达到速率限制。
LeverPhp()
构造函数在其第三个参数中接受一个自定义存储来解决内存问题。如果您正在使用Laravel,则已配置了使用您的缓存驱动器的自定义存储。有关更多信息,请参阅 GuzzleRateLimiterMiddleware 的文档。
客户端
如果您要访问的资源不可用,您可以通过调用 Lever::client()
直接获取Guzzle客户端的实例。请随意将其添加到源代码中。有关详细信息,请参阅 CONTRIBUTING。
测试
composer test
更新日志
有关最近更改的更多信息,请参阅 CHANGELOG。
贡献
有关详细信息,请参阅 CONTRIBUTING。
安全
如果您发现任何安全相关的问题,请通过电子邮件 dev@via.work 而不是使用问题跟踪器。
鸣谢
许可
MIT 许可证 (MIT)。有关更多信息,请参阅 许可文件。