承接 hrabo/ares-bundle 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

hrabo/ares-bundle

最新稳定版本:v0.1.0

Composer 安装命令:

composer require hrabo/ares-bundle

包简介

Symfony bundle for ARES (Administrativní registr ekonomických subjektů) REST API integration.

README 文档

README

Symfony bundle integrating the official ARES (Administrativní registr ekonomických subjektů) REST API.

The bundle focuses on:

  • Company detail by IČO from ARES “core” and/or individual datasets (RES, VR, RŽP, ROS, RCNS, RPSH, CEÚ, RŠ, SZR, NRPZS).
  • Configurable retries (HTTP client retry strategy + Retry-After support).
  • Configurable rate limiting (token bucket limiter) to avoid API blocking.
  • Standardized output (DTOs + toArray()).

API documentation:

Installation

composer require hrabo/ares-bundle

Enable the bundle (if not using Flex auto-discovery):

// config/bundles.php
return [
    // ...
    Hrabo\AresBundle\HraboAresBundle::class => ['all' => true],
];

Configuration

Create config/packages/hrabo_ares.yaml:

hrabo_ares:
  base_uri: 'https://ares.gov.cz/ekonomicke-subjekty-v-be/rest/'
  timeout_seconds: 10

  retry:
    max_retries: 3
    delay_ms: 250
    multiplier: 2.0
    max_delay_ms: 5000
    jitter: 0.1
    status_codes: [0, 429, 500, 502, 503, 504]

  rate_limit:
    enabled: true
    # Token bucket limiter:
    limit: 10
    interval: '1 second'
    burst: 20
    wait: true
    key: 'ares-outgoing' # all workers share this key via cache.app

  datasets:
    # Default datasets used by findCompanyByIco() when not provided explicitly:
    - ares
    - res
    - vr
    - rzp
    - ros
    - rcns
    - rpsh
    - ceu
    - rs
    - szr
    - nrpzs

Notes:

  • rate_limit.key is stored via cache.app and shared across workers/servers if cache.app uses a shared backend (Redis, Memcached, ...).
  • For maximum safety against ARES blocking, prefer a shared cache backend for cache.app (Redis).

Usage

1) Aggregate lookup by IČO across datasets

use Hrabo\AresBundle\Client\AresClientInterface;

final class SomeService
{
    public function __construct(private AresClientInterface $ares) {}

    public function run(): void
    {
        $result = $this->ares->findCompanyByIco('00006947'); // or '6947'
        $best = $result->company; // NormalizedCompany|null

        // Array for storage/export:
        $payload = $result->toArray();
    }
}

2) Single dataset detail (GET {ico})

use Hrabo\AresBundle\Enum\Dataset;

$datasetResult = $ares->getEconomicSubject('6947', Dataset::RES);

if ($datasetResult->isOk()) {
    $company = $datasetResult->company; // NormalizedCompany
    $raw = $datasetResult->raw;         // array
}

3) Search (POST vyhledat)

use Hrabo\AresBundle\Enum\Dataset;

$search = $ares->searchEconomicSubjects(Dataset::ARES, [
    'start' => 0,
    'pocet' => 10,
    'obchodniJmeno' => 'Ministerstvo financí',
]);

// $search is raw ARES response array.

4) Codebooks (POST vyhledat)

$codebooks = $ares->searchCodebooks([
    'start' => 0,
    'pocet' => 50,
    'kodCiselniku' => 'PravniForma',
]);

5) Standardized addresses (POST vyhledat)

$addresses = $ares->searchStandardizedAddresses([
    'start' => 0,
    'pocet' => 10,
    'textovaAdresa' => 'Letenská 525/15, Praha 1',
]);

Error handling contract

  • Input validation:
    • Invalid IČO causes an InvalidArgumentException from IcoNormalizer::normalize().
  • GET (company detail):
    • getEconomicSubject() and findCompanyByIco() do not throw on HTTP/API failures.
    • They always return DatasetResult entries with status:
      • ok (HTTP 200)
      • not_found (HTTP 404)
      • error (transport issues, invalid responses, non-200/404)
  • POST endpoints (search/codebooks/addresses):
    • searchEconomicSubjects(), searchCodebooks(), searchStandardizedAddresses() throw AresApiException on non-200 responses or invalid responses.
  • Rate limiting:
    • If rate limiting is enabled and wait=false, the client may throw AresRateLimitExceededException.

Standardized output

  • CompanyLookupResult contains:
    • icoCanonical (8 digits, left padded with zeros)
    • company (first successful NormalizedCompany in chosen dataset order)
    • datasets map: dataset code → DatasetResult

Development

Quality checks (PHPCS + PHPStan)

This project uses:

  • PHPCS (Symfony coding standard) for code style
  • PHPStan for static analysis
# run everything (style + static analysis)
composer check

# style only
composer phpcs

# auto-fix style (what can be fixed automatically)
composer phpcbf

# static analysis only
composer phpstan

Config files:

  • PHPCS ruleset: phpcs.xml
  • PHPStan config: phpstan.neon

Tests

composer install
vendor/bin/phpunit

Code style (phpcs/phpcbf)

# show violations
vendor/bin/phpcs

# auto-fix what can be fixed
vendor/bin/phpcbf

The ruleset is in phpcs.xml and uses the Symfony PHP_CodeSniffer standard.

Versioning

This is an initial bundle skeleton intended to be extended inside your application. PRs welcome.

统计信息

  • 总下载量: 7
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 5
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-03-04

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固