Библиотеки
API — обычный HTTP, но библиотека предлагает использовать меньше кода и допускать меньше ошибок. Например, она повторяет запрос при перегрузке, проверяет параметры до отправки и превращает ответы в понятные исключения.
| Язык | Установка | Версии |
|---|---|---|
| Python | pip install pdfapi | 3.9+ |
| Node.js и TypeScript | npm install pdfapi | Node 20.3+, Bun, Deno |
| Go | go get github.com/Homelander-77/PDF-creator-site/sdk/go | 1.21+ |
| PHP | composer require pdfapi/pdfapi | 8.2+ |
| C# и .NET | dotnet add package PdfApi | .NET 8, .NET Standard 2.0 |
Одинаковые во всех языках#
Библиотеки сделаны по одной политике и проверены одними и теми же тестами, поведение у всех одинаковое:
- Методы —
html,url,markdown,office,meи низкоуровневыйconvertдля всего остального. - Ключ — из переменной окружения
PDFAPI_KEY, адрес — изPDFAPI_BASE_URL. Нет ключа — ошибка сразу при создании клиента, а не401при первом запросе. - Проверка до запроса — размеры с единицами измерения,
waitDelayдо 10 секунд, адрес сhttp(s)://, файл Office — настоящий ZIP до 3,7 МБ. Ошибка аргумента не тратит ни запрос, ни лимит частоты. - Повторы —
429черезRetry-After,503и неустановленное соединение — с нарастающей паузой, до двух раз. Таймауты не повторяются: в редком случае страницы могли уже списаться. - Сохранение —
saveпишет атомарно: если запись оборвётся, прежний файл останется целым. - Ключ не утекает — его нет в строковом представлении клиента, в текстах ошибок и журналах.
Ошибки#
Если что-то пошло не так, библиотека выдаёт ошибку с понятным названием: кончились страницы — QuotaExceededError, слишком частые запросы — RateLimitError. Так в коде можно по-разному реагировать на разные проблемы. А если причина неважна, ловите PdfApiError из первой строки таблицы — он перехватывает любую ошибку pdfapi.
| Python, Node.js | Go (errors.Is) | PHP, C# | HTTP |
|---|---|---|---|
PdfApiError | *pdfapi.Error | PdfApiException | любой |
AuthenticationError | ErrAuthentication | AuthenticationException | 401 |
PermissionDeniedError | ErrPermissionDenied | PermissionDeniedException | 403 |
QuotaExceededError | ErrQuotaExceeded | QuotaExceededException | 402 |
InvalidRequestError | ErrInvalidRequest | InvalidRequestException | 400 |
PayloadTooLargeError | ErrPayloadTooLarge | PayloadTooLargeException | 413 |
RateLimitError | ErrRateLimit | RateLimitException | 429 |
RenderError | ErrRender | RenderException | 502 |
RenderTimeoutError | ErrRenderTimeout | RenderTimeoutException | 504 |
UnavailableError | ErrUnavailable | UnavailableException | 503 |
APIConnectionError | ErrConnection | ApiConnectionException | нет связи |
APITimeoutError | ErrTimeout | ApiTimeoutException | таймаут |
Примеры#
У каждой библиотеки одни и те же примеры: счёт из HTML-шаблона, страница по адресу, документ Office, пачка документов с ограничением частоты, проверка квоты для cron и отдача PDF из веб-приложения.
Нет библиотеки для вашего языка — API работает с любым HTTP-клиентом: см. справочник. В скором времени добавим ещё несколько языков программирования.