runet-id/api-client
A Laravel/PHP client for the Runet-ID API that simplifies authentication and requests with a clean, configurable wrapper and typed responses for domain and registrar data. Add Runet-ID services to your app quickly using expressive methods and Laravel-friendly setup.
Architecture fit
The package is a thin API client for the RUNET-ID registry service (domain/IP/AS lookup and related registry data). Architecturally it is an outbound HTTP adapter, not a framework component: it does not own persistence, queues, or UI concerns, and it should sit at the edge of the application behind an internal interface. For a Laravel codebase that is a comfortable fit — it belongs in a Services/RunetId boundary or a small dedicated package of your own, injected rather than called statically. The real architectural decision is not "do we install this" but "what is our anti-corruption layer over the RUNET-ID REST API," because the client is replaceable and the API contract is not.
Integration feasibility
Composer-installable, MIT licensed, so legal/procurement friction is near zero. The material risks are compatibility and liveness:
guzzlehttp/guzzle are the most likely install-time blocker.Technical risk
| Risk | Severity | Notes |
|---|---|---|
| Unmaintained upstream (0 stars, 0 dependents, 3+ years stale) | High | No community bug reports, no security advisory coverage, no one else to validate against |
| PHP/Laravel version drift | Medium‑High | Deprecations can surface as runtime TypeErrors; static analysis needed |
| Upstream API contract change | Medium | A thin wrapper gives no schema validation or graceful degradation |
| Single-vendor dependency | Medium | One maintainer org; bus factor effectively 1 |
| Data licensing / residency | Medium | Registry data usage terms and any 152-FZ implications need legal sign-off |
| Cross-border latency and availability | Medium | Affects UX for synchronous lookups |
The 0.16 score and zero dependents mean you cannot infer quality from adoption. Treat the package as unvetted third-party code and review it as you would any 500-line dependency: read the source, check for hardcoded endpoints, credential handling, and error paths.
Key questions
Stack fit
Good conceptual fit for Laravel: an outbound HTTP integration that maps cleanly onto the container, config, cache, queue, and HTTP-client primitives. It is a poor fit for any pattern that assumes a maintained, framework-aware package (auto-discovery, published config, first-party testing utilities). Assume you own the wiring.
Migration path
Because the client is thin, the exit cost is low — this is the strongest argument in its favour. Structure the integration so that remains true:
RegistryLookup interface in your domain with the 3–6 methods you actually need.RunetIdAdapter that wraps the package. Nothing else in the codebase imports the vendor namespace.If install-time conflicts appear, skip the package entirely and implement the adapter directly against the documented REST endpoints — for a client this small the package saves hours, not weeks.
Compatibility
composer why-not against your PHP and Guzzle versions before committing to a sprint.Sequencing
Maintenance
Assume zero upstream maintenance and budget accordingly: one named owner, a quarterly review of the pinned version, and a standing item to re-evaluate "fork vs. drop the package and call the API directly." Realistic ongoing cost is low — a few hours per quarter — provided the adapter boundary is respected. The compounding cost is cognitive: an unmaintained Russian-language dependency in the stack is a recurring question in every security and architecture review.
Support
Support runs through the RUNET-ID vendor, in Russian, on Moscow time. Escalation paths are undocumented from the outside and must be established during the spike, not during an incident. Internally, the on-call runbook needs: how to identify upstream-origin failures, how to toggle the feature flag off, and what degraded behaviour looks like (stale cache serving versus hard error). Do not let this integration become a silent hard dependency of a critical user flow.
Scaling
The client itself is stateless and cannot be the bottleneck; the constraints are upstream. Throughput is bounded by RUNET-ID rate limits and cross-border latency. Design for cache-hit ratio, not request volume: aggressive caching plus queued backfill gets you to near-arbitrary scale on a handful of upstream calls per minute. Watch for thundering-herd on cache expiry — add jitter and a lock around refresh.
Failure modes
429/quota exhaustion → backoff with jitter, circuit breaker, alert on sustained open state.Ramp-up
Engineering ramp-up is genuinely small: the API surface is narrow and the wrapper is shallow, so a mid-level Laravel developer is productive in half a day, with the bulk of the effort spent on the adapter, caching, and tests rather than on the package itself. The real ramp-up cost is domain knowledge — what RUNET-ID identifiers and records mean, which fields are authoritative, and how to explain data staleness to stakeholders and compliance. Budget that as a documentation task owned by the TPM, not as an onboarding side-effect.
TPM recommendation
Proceed only as a contained, reversible integration: spike first, wrap behind an internal interface, cache hard, feature-flag it, and assume you will eventually replace the client with a first-party HTTP call. Do not let it become a direct dependency of critical paths, and do not accept it into the stack without the seven key questions above answered in writing.
How can I help you explore Laravel packages today?