via-work/lever-php

PHP中超级简单的Lever DATA API v1包装器,支持Laravel。

2.0.1 2021-05-05 14:32 UTC

This package is auto-updated.

Last update: 2024-09-05 22:20:06 UTC


README

Latest Version on Packagist Build Status Quality Score Total Downloads StyleCI

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()方法(在createupdate方法之前!)例如,您可以在创建机会时附加简历

$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)。有关更多信息,请参阅 许可文件