Головна/Рецепти/Резолвінг усієї задачі 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 — це провайдер, якого хтось перевірив для цієї мови.

Далі