andersonef/cep-promise-php

filipedeschamps/cep-promise 项目的 PHP 版本。目的是为了实践功能,而不是完全复制实现。

1.0.1 2020-05-08 23:11 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 的启发。