PerfectVector
Автор: Jay

Пакетная векторизация через API с возобновлением

Поставьте изображения в надёжную очередь. Сохраняйте ID конвертаций, обрабатывайте ошибки и продолжайте работу без повторной отправки готовых файлов.

7 мин чтения
На этой странице

Чтобы векторизовать изображения через API пакетно, поставьте каждый исходный файл в очередь и сохраните ход его обработки перед переходом к следующему. В PerfectVector API v1 очередью управляет ваш обработчик. API принимает одно изображение на запрос и по умолчанию допускает одну активную рабочую конвертацию на аккаунт. Ограничения PerfectVector API

Попробуйте на своём изображении
Открыть полный инструмент
Бесплатно и без регистрации: перетащите изображение, чтобы увидеть превью своего вектора.

Создайте запись для каждого изображения

Сохраните неизменяемую копию каждого исходника и выделите отдельную папку для результатов. Ниже предполагаются один обработчик, локальная база SQLite и папка с однофреймовыми PNG, JPEG или WebP. Сверьтесь с ограничениями файлов API, прежде чем добавлять файлы. Назначьте каждому результату уникальный путь, чтобы два исходника с именем logo.png не перезаписали друг друга.

Сохраните следующие поля вместе до первой попытки загрузки.

ПолеЧто хранить
ИсходникСтабильный путь или версию объекта и хеш исходных байтов.
Ключ запросаКлюч идемпотентности, по которому API распознаёт повторы этой операции. Запишите время первой попытки POST.
ID конвертацииИдентификатор API вида vec_…. Сохраните его сразу после получения.
РезультатУникальный локальный путь и последнее подтверждённое состояние записи.
Сведения об ошибкеКод проблемы API, ID запроса или ошибка конвертации, если доступны.

Зафиксируйте запись в очереди до отправки POST. Если API примет файл, но соединение оборвётся до получения ID, у вас останется ключ для повтора. PerfectVector распознаёт его в течение 24 часов от первого запроса в том же аккаунте и режиме. При повторе отправляйте те же байты и параметры. Идемпотентность в PerfectVector

Схема работы
Стопка растровых изображений с меткой ведёт к сохранённой записи конвертации и далее к SVG. Стрелка от перезапуска указывает на сохранённую запись.
Сохраните ID конвертации перед скачиванием. После сбоя продолжайте по сохранённому ID.

Отправляйте, проверяйте и сохраняйте по одной задаче

Отправьте multipart-запрос POST на /v1/vectorizations, поместив изображение в поле image и ключ строки в заголовок Idempotency-Key. Для быстрой отправки используйте Prefer: respond-async. Запишите ID из успешного ответа до опроса статуса. Ответ 202 означает, что конвертация ещё идёт. Ответ 201 может содержать как успешную, так и неудачную конвертацию, поэтому проверьте статус в JSON. Ожидание и асинхронные запросы PerfectVector

Ниже приведены действия обработчика. Состояние очереди вроде saved задаёте вы. API возвращает статусы вроде processing и succeeded.

Запись в очереди на дискеСледующее действие обработчика
Новая, ключ сохранёнЗагрузить исходные байты и записать полученный ID.
Отправка не подтверждена, ID неизвестенВ пределах окна повтора снова отправить тот же файл с сохранённым ключом. После окончания окна пометить запись для проверки перед новой, потенциально платной конвертацией.
ID сохранёнОпросить существующий ID. Между проверками подождать около двух секунд и соблюдать задержки при ограничении частоты запросов.
Конвертация успешна, файла нетСкачать результат, проверить image/svg+xml, записать во временный файл и переименовать его в целевой. Затем пометить запись как сохранённую.
СохраненоПропустить POST. Если результат пропал, попробовать скачать его по существующей ссылке, пока она действует.
Запрос отклонён или конвертация не удаласьЗаписать проблему HTTP или окончательную ошибку конвертации. Исправить исходник перед новой операцией.

Если POST вернул 429 или 503, соблюдайте Retry-After и повторите запрос с тем же изображением, параметрами и ключом в течение 24 часов. При too_many_in_flight также дождитесь окончания активной конвертации. Если ID уже есть, проверьте его перед новой отправкой. После подтверждённого окончательного статуса failed с ошибкой timeout или provider_unavailable для новой попытки нужен новый ключ. При недоступности провайдера дождитесь восстановления. При тайм-ауте на стороне клиента состояние конвертации неизвестно. Проверьте ID или повторите запрос с исходным ключом в пределах окна. Ошибки PerfectVector API

После перезапуска обработчик может снова проверить статус или скачать результат без новой конвертации. Скачивайте и сохраняйте каждый готовый SVG перед переходом к следующему файлу. Результат API доступен 24 часа после окончания конвертации. Результаты и скачивание в PerfectVector

Этот псевдокод можно адаптировать к своей базе и HTTP-клиенту. В проверке ниже обработчик записывает все запросы в журнал и позволяет тесту остановить его сразу после сохранения второго ID.

for each queue row in a stable order:
    if the row is rejected or its saved SVG is still on disk:
        continue
    if the row has no conversion ID:
        verify source bytes match the stored digest
        if an earlier POST is uncertain and the replay window expired:
            flag the row for review and continue
        POST with the stored key and original bytes and options
        if the response is a permanent input rejection:
            commit the error and continue
        if the POST times out or the service requests a retry:
            keep the same key, record the retry time and stop this run
        commit the returned conversion ID
        pause here when testing recovery after a commit
    GET status by conversion ID, waiting between pending responses
    if conversion failed:
        commit its error and continue
    download the existing result and check the SVG media type
    write to a temporary file and rename it to the output path
    commit the saved state

Проверьте перезапуск на трёх файлах

Возьмите два небольших логотипа PNG и один повреждённый PNG. Оставьте повреждённый файл в тесте, чтобы проверить, продолжает ли очередь работу после отклонения. С тестовым ключом оба корректных файла должны вернуть тестовые SVG. Повреждённый файл должен не пройти проверку и не появиться в папке результатов. В тестовом режиме оба корректных файла возвращают один и тот же пример SVG. Тестовый режим PerfectVector

  1. Дождитесь, пока первый файл получит статус saved. Остановите обработчик после записи ID второго корректного файла и до сохранения результата.
  2. Перезапустите обработчик. Убедитесь, что он пропускает первый файл и скачивает второй по уже сохранённому ID.
  3. Проверьте, что повреждённый файл есть в отчёте с кодом проблемы и что для него не записан SVG.
  4. Запустите обработчик ещё раз. Убедитесь, что оба SVG остались на месте и ни одна успешная загрузка не повторилась.

Мы проверили перезапуск с тестовым ключом API. Обработчик сохранил два тестовых SVG, записал один повреждённый файл как отклонённый и продолжил обработку второго корректного файла по сохранённому ID. Последний запуск не отправил ни одного запроса. Тестовые конвертации заканчиваются сразу, поэтому для проверки ветки ожидания подготовьте тестовый ответ.

Частые вопросы

Можно ли отправить все файлы одним вызовом API?

PerfectVector API v1 принимает одно изображение в каждом POST. Отправляйте партию отдельными запросами. В рабочем режиме учитывайте лимит активных конвертаций на аккаунт и дождитесь завершения текущей перед отправкой следующей. Ограничения PerfectVector API

Что делать, если срок скачивания SVG уже истёк?

Используйте сохранённый SVG, если успели скачать его. В противном случае проверьте статус конвертации и решите, запускать ли новую. Успешная рабочая конвертация может списать ещё один кредит. Результаты и скачивание в PerfectVector

Источники

  1. PerfectVector — ограничения — проверка файлов и число одновременных конвертаций по умолчанию.
  2. PerfectVector — идемпотентность — область действия ключа, окно повтора и совпадение входных данных.
  3. PerfectVector — ожидание и асинхронная работа — асинхронная отправка и опрос статуса.
  4. PerfectVector — результаты — скачивание, ошибки и срок доступности результата.
  5. PerfectVector — тестовый режим — проверки загрузки и результаты, доступные с тестовым ключом.
  6. PerfectVector — ошибки — задержки Retry-After, окончательные ошибки и условия применения нового ключа.

Получите тестовый ключ на странице PerfectVector API и проверьте перезапуск на трёх своих файлах. Убедитесь, что для каждой успешной записи на диске есть SVG, а готовые файлы не отправляются снова после перезапуска.

Ещё из блога

PerfectVector

Превратите изображение в
чистые редактируемые контуры

Векторизуйте и проверяйте предпросмотр бесплатно, без дневного лимита.