Главная/Рецепты/Резолвинг всей задачи ENУКРРУС API-справочник (ReDoc) ↗

Резолвинг всей задачи

Source и target — или один source на много targets — одним запросом.

Цель: задаче перевода нужны коды source и target. Проект разворачивает один source на все targets. Сделайте это за один раунд-трип.

curl -X POST https://languages.service.custom.mt/v1/resolve/batch \
  -H 'Content-Type: application/json' \
  -d '{"pairs":[
        {"provider":"deepl_api","language":"en"},
        {"provider":"deepl_api","language":"pt_BR"},
        {"provider":"deepl_api","language":"de-CH"}
      ]}'
{ "items": [
  { "provider": "deepl_api", "language": "en",
    "result": { "code": "en", "match": "canonical",  }, "error": null },
  { "provider": "deepl_api", "language": "pt_BR",
    "result": { "code": "PT-BR", "match": "exact",  }, "error": null },
  { "provider": "deepl_api", "language": "de-CH",
    "result": { "code": "de", "match": "base_language",  }, "error": null }
] }

Порядок сохранён. Элемент n отвечает паре n.

Сбои изолированы. Каждый элемент несёт либо result, либо error, никогда оба, и ответ всегда 200. Один неизвестный язык из пятидесяти не должен стоить вам остальных сорока девяти.

До 500 пар на запрос.

Python

def resolve_job(provider: str, source: str, targets: list[str]) -> tuple[str, dict[str, str]]:
    pairs = [{"provider": provider, "language": code} for code in [source, *targets]]
    items = (
        httpx.post(f"{BASE}/v1/resolve/batch", json={"pairs": pairs}, timeout=10.0)
        .raise_for_status()
        .json()["items"]
    )

    head, *rest = items
    if head["result"] is None:
        raise ValueError(f"язык source {source!r}: {head['error']['message']}")

    resolved = {}
    for target, item in zip(targets, rest, strict=True):
        if item["result"] and item["result"]["supported"]:
            resolved[target] = item["result"]["code"]
        else:
            log.warning("target dropped", extra={"language": target, "provider": provider})
    return head["result"]["code"], resolved

Обратите внимание на strict=True в zip: порядок — это гарантия, и её проверка превращает нарушение контракта в исключение вместо тихо смещённого результата.

Сравнение провайдеров для одной языковой пары

Тот же эндпоинт, несколько провайдеров — полезно при выборе движка:

{"pairs": [
  {"provider": "deepl_api",    "language": "zh-TW"},
  {"provider": "google_translate", "language": "zh-TW"},
  {"provider": "openai_api",   "language": "zh-TW"}
]}

Каждый result.match со значением exact — это провайдер, которого кто-то проверил для этого языка.

Далее