andersonef / cep-promise-php
filipedeschamps/cep-promise 项目的 PHP 版本。目的是为了实践功能,而不是完全复制实现。
1.0.1
2020-05-08 23:11 UTC
Requires
- guzzlehttp/guzzle: ^6.5
Requires (Dev)
- phpunit/phpunit: ^9
This package is auto-updated.
Last update: 2024-09-19 22:36:59 UTC
README
CEP Promise
直接集成 Correios、ViaCEP 和 WideNet 的 CEP 搜索服务。描述
这个库是对 Filipe Deschamps (Michel Teló) 的原始库的复制,我认为这个前提非常有趣,所以我决定在 PHP 和 Python 中复制它。
由于 Filipe 使用了具有函数式方法的 JS,而我在这项项目中选择了测试驱动的面向对象方法,所以代码风格是不同的。
功能
- 通过直接连接到 Correios、ViaCEP 和 WideNet 的服务,实时更新。
- 由于使用了多个服务作为后备,因此具有高可用性。
- 没有已知的限制使用(速率限制)。
- 100% 的代码覆盖率,包括单元测试和集成测试。
如何使用
安装
通过在 bash 中使用 composer 命令直接安装
composer require andersonef/cep-promise-php
或修改您的 composer.json 文件,将库添加到依赖项中
"require": { "andersonef/cep-promise-php": "^1.0.0" }
使用
使用非常简单
$promise = (new CepPromise('83322170'))->fetch(); // ASSÍNCRONO: Com a promise em mãos, eu posso tanto: $promise->then(function($endereco) { // sua lógica aqui }); // SÍNCRONO: $endereco = $promise->wait(); /** Endereço: * { "cep": "83322170", "street": "Rua Rio Tocantins", "neighborhood": "Weissópolis", "city": "Pinhais", "state": "PR" } */
返回值总是 Andersonef\CepPromise\ResponseAddress 类型的对象。
自定义
您可以使用这个库轻松创建新的服务作为后备。
任何实现 Andersonef\CepPromise\Interfaces\ServiceInterface 接口的对象都可以作为服务。
class CepFromDatabase implements ServiceInterface { public function fetch($cep): ResponseAddress { // .. your custom logic here $response = new ResponseAddress( $cep, $rua, $bairro, $cidade, $estado ); return $response; } }
创建您的自定义服务后,只需将其添加到您的 CepPromise 实例中,如下所示
$cepFromDatabaseService = new CepFromDatabase(); $cepPromise = new CepPromise(); $endereco = $cepPromise ->clearServices() // OPCIONAL: elimina os services padrão (correios, viacep e widenet) ->appendService($cepFromDatabaseService) ->fetch('83322170'); // Agora a classe irá usar seu service customizado!
处理失败
这个库中的任何错误都会抛出一个 Andersonef\CepPromise\CepPromiseException 类型的异常。
留下您的建议
欢迎在 issues 中留下建议!
来源
这个包受到了原始版本 https://github.com/filipedeschamps/cep-promise 的启发。