Share via


프로그래밍 방식으로 REST API 사용

문서 번역은 Azure AI 번역기 서비스의 클라우드 기반 기능입니다. 문서 번역 API를 사용하여 원본 문서 구조 및 텍스트 서식을 유지하면서 지원되는 언어 및 다양한 파일 형식 으로 전체 문서를 비동기적으로 번역할 수 있습니다. 이 방법 가이드에서는 선택한 프로그래밍 언어와 HTTP REST API를 사용하여 문서 번역 API를 사용하는 방법을 알아봅니다.

필수 조건

참고 항목

  • 일반적으로 Azure portal에서 Azure AI 리소스를 만들 때 다중 서비스 키 또는 단일 서비스 키를 만드는 옵션이 있습니다. 그러나 문서 번역은 현재 번역기(단일 서비스) 리소스에서만 지원되며 Azure AI 서비스(다중 서비스) 리소스에는 포함되지 않습니다.

  • 문서 번역은 S1 표준 서비스 계획(종량제) 또는 D3 볼륨 할인 플랜에서 지원됩니다. Azure AI 서비스 가격 책정 - 번역기를 참조하세요.

시작하려면 다음이 필요합니다.

  • 활성 Azure 계정. 계정이 없는 경우 체험 계정을 만들 수 있습니다 .

  • Azure Blob Storage 계정 또한 원본 및 대상 파일에 대한 Azure Blob Storage 계정에 컨테이너를 생성해야 합니다.

    • 원본 컨테이너. 이 컨테이너는 번역을 위해 파일을 업로드하는 위치입니다(필수).
    • 대상 컨테이너. 이 컨테이너는 번역된 파일이 저장되는 곳입니다(필수).
  • 단일 서비스 번역기 리소스(다중 서비스 Azure AI 서비스 리소스가 아님):

    다음과 같이 Translator 프로젝트 및 인스턴스 세부 정보 필드를 완료합니다.

    1. 구독. 사용 가능한 Azure 구독 중 하나를 선택합니다.

    2. 리소스 그룹. 새 리소스 그룹을 만들거나 동일한 수명 주기, 권한 및 정책을 공유하는 기존 리소스 그룹에 리소스를 추가할 수 있습니다.

    3. 리소스 지역. 비즈니스 또는 애플리케이션에서 특정 지역을 요구하지 않는 한 전체를 선택합니다. 인증에 시스템 할당 관리 ID를 사용하려는 경우 미국 서부와 같은 지리적 지역을 선택합니다.

    4. Name(이름): 리소스에 대해 선택한 이름을 입력합니다. 선택하는 이름이 Azure 내에서 고유해야 합니다.

      참고 항목

      문서 번역에는 사용자 지정 도메인 엔드포인트가 필요합니다. 이름 필드에 입력하는 값은 엔드포인트에 대한 사용자 지정 도메인 이름 매개 변수가 됩니다.

    5. 가격 책정 계층. 무료 계층에서는 문서 번역이 지원되지 않습니다. 서비스를 시도하려면 표준 S1을 선택합니다.

    6. 검토 + 생성를 선택합니다.

    7. 서비스 약관을 검토하고 만들기를 선택하여 리소스를 배포합니다.

    8. 리소스가 성공적으로 배포된 후 리소스로 이동하여 키와 엔드포인트검색합니다.

키 및 사용자 지정 do기본 엔드포인트 검색

  • 번역기 서비스에 대한 요청은 액세스를 인증하기 위해 읽기 전용 키 및 사용자 지정 엔드포인트가 필요합니다. 사용자 지정 do기본 엔드포인트는 리소스 이름, 호스트 이름 및 번역기 하위 디렉터리로 포맷된 URL이며 Azure Portal에서 사용할 수 있습니다.
  1. 새 리소스를 만든 경우 배포한 후 리소스로 이동을 선택합니다. 기존 문서 번역 리소스가 있는 경우 리소스 페이지로 직접 이동합니다.

  2. 왼쪽 레일의 리소스 관리에서 키 및 엔드포인트를 선택합니다.

  3. Microsoft 메모장 같은 편리한 위치에 복사하여 붙여 keydocument translation endpoint 넣습니다. API 호출을 수행하는 데는 키가 하나만 필요합니다.

  4. key 사용자와 document translation endpoint 코드 샘플로 이동하여 문서 번역 서비스에 대한 요청을 인증합니다.

    Screenshot showing the get your key field in Azure portal.

키 가져오기

번역기 서비스에 대한 요청에는 액세스를 인증하기 위한 읽기 전용 키가 필요합니다.

  1. 새 리소스를 만든 경우 배포한 후 리소스로 이동을 선택합니다. 기존 문서 번역 리소스가 있는 경우 리소스 페이지로 직접 이동합니다.
  2. 왼쪽 레일의 리소스 관리에서 키 및 엔드포인트를 선택합니다.
  3. Microsoft 메모장과 같은 편리한 위치에 키를 복사하여 붙여넣습니다.
  4. 코드 샘플에 붙여넣어 문서 번역 서비스에 대한 요청을 인증합니다.

Image of the get your key field in Azure portal.

Azure Blob Storage 컨테이너 만들기

원본 및 대상 파일에 대한 Azure Blob Storage 계정에서 컨테이너를 생성해야 합니다.

  • 원본 컨테이너. 이 컨테이너는 번역을 위해 파일을 업로드하는 위치입니다(필수).
  • 대상 컨테이너. 이 컨테이너는 번역된 파일이 저장되는 곳입니다(필수).

참고 항목

문서 번역은 대상 컨테이너에서 용어집을 Blob으로서 지원합니다(별도 용어집 컨테이너 아님). 사용자 지정 용어집을 포함하려면 대상 컨테이너에 추가하고 요청에 glossaryUrl을 포함합니다. 용어집에 번역 언어 쌍이 없으면 적용되지 않습니다. 사용자 지정 용어집을 사용하여 문서 번역참조

문서 번역을 위한 SAS 토큰 생성

sourceUrl, targetUrl 및 선택적 glossaryUrl에는 쿼리 문자열로 추가된 SAS(공유 액세스 서명) 토큰이 포함되어야 합니다. 토큰은 컨테이너 또는 특정 Blob에 할당할 수 있습니다. 문서 번역을 위한 SAS 토큰 생성 프로세스참조하세요.

  • 원본 컨테이너 또는 Blob은 읽기목록 액세스를 지정해야 합니다.
  • 대상 컨테이너 또는 Blob은 쓰기목록 액세스를 지정해야 합니다.
  • 용어집 Blob은 읽기목록 액세스를 지정해야 합니다.

  • 작업에서 여러 파일(Blob)을 번역하는 경우 컨테이너 수준에서 SAS 액세스 권한을 위임합니다.
  • 작업에서 단일 파일(Blob)을 변환하는 경우 Blob 수준에서 SAS 액세스를 위임합니다.
  • SAS 토큰 대신 시스템이 할당한 관리 ID를 인증에 사용할 수 있습니다.

HTTP 요청

비동기 일괄 처리 변환 요청은 POST 요청을 통해 번역기 서비스 엔드포인트에 제출됩니다. 성공하면 POST 메서드는 202 Accepted 응답 코드를 반환하고 서비스는 일괄 처리 요청을 만듭니다. 번역된 문서는 대상 컨테이너에 나열됩니다.

Azure AI 번역기 서비스 요청 제한에 대한 자세한 내용은 문서 번역 요청 제한을 참조하세요.

HTTP 헤더

각 Document Translation API 요청에는 다음 헤더가 포함됩니다.

HTTP 헤더 설명
Ocp-Apim-Subscription-Key 필수: 값은 번역기 또는 Azure AI 서비스 리소스에 대한 Azure 키입니다.
콘텐츠-형식 필수: 페이로드의 콘텐츠 형식을 지정합니다. 허용되는 값은 application/json 또는 charset=UTF-8입니다.

POST 요청 본문 속성

  • POST 요청 URL은 POST https://<NAME-OF-YOUR-RESOURCE>.cognitiveservices.azure.com/translator/text/batch/v1.1/batches입니다.
  • POST 요청 본문은 이름이 inputsJSON 개체입니다.
  • inputs 개체는 원본 및 대상 언어 쌍에 대한 sourceURLtargetURL 컨테이너 주소를 모두 포함합니다.
  • prefixsuffix는 번역을 위해 원본 경로의 문서를 필터링하는 대/소문자를 구분하는 문자열입니다. prefix 필드는 번역을 위해 하위 폴더를 나타내는 데 자주 사용됩니다. suffix 필드는 파일 확장 프로그램에 가장 자주 사용됩니다.
  • glossaries 필드(선택 사항)의 값은 문서가 번역될 때 적용됩니다.
  • 각 대상 언어의 targetUrl은 고유해야 합니다.

참고 항목

이름이 같은 파일이 대상에 이미 있으면 작업이 실패합니다.

컨테이너의 모든 문서 번역

{
    "inputs": [
        {
            "source": {
                "sourceUrl": "{sourceSASUrl}"
            },
            "targets": [
                {
                    "targetUrl": "{targetSASUrl}",
                    "language": "fr"
                }
            ]
        }
    ]
}

컨테이너의 특정 문서 번역

  • "storageType": "File"을 지정합니다.
  • 인증에 시스템 할당 관리 ID사용하지 않는 경우 특정 Blob/문서에 대한 원본 URL 및 SAS 토큰을 생성했는지 확인합니다(컨테이너용이 아님).
  • SAS 토큰이 컨테이너에 대해 여전히 있지만 대상 파일 이름을 대상 URL의 일부로 지정했는지 확인합니다.
  • 이 샘플 요청은 두 개의 대상 언어로 번역된 단일 문서를 반환합니다.
{
    "inputs": [
        {
            "storageType": "File",
            "source": {
                "sourceUrl": "{sourceSASUrl}"
            },
            "targets": [
                {
                    "targetUrl": "{targetSASUrl}",
                    "language": "es"
                },
                {
                    "targetUrl": "{targetSASUrl}",
                    "language": "de"
                }
            ]
        }
    ]
}

사용자 지정 용어집을 사용하여 문서 번역

{
    "inputs": [
        {
            "source": {
                "sourceUrl": "{sourceSASUrl}"
             },
            "targets": [
                {
                    "targetUrl": "{targetSASUrl}",
                    "language": "es",
                    "glossaries": [
                        {
                            "glossaryUrl": "{glossaryUrl/en-es.xlf}",
                            "format": "xliff"
                        }
                    ]
                }
            ]
        }
    ]
}

코드를 사용하여 문서 번역 요청 제출

코딩 플랫폼 설정

  • 새 프로젝트를 만듭니다.
  • Program.cs C# 코드 샘플로 바꿉 있습니다.
  • Program.cs에서 엔드포인트, 키 및 컨테이너 URL 값을 설정합니다.
  • JSON 데이터 처리를 위해 .NET CLI를 사용하여 Newtonsoft.Json 패키지를 추가합니다.
  • 프로젝트 디렉터리에서 프로그램을 실행합니다.

Important

코드 샘플의 경우 표시된 SAS(공유 액세스 서명) URL을 하드 코딩합니다. 완료되면 코드에서 SAS URL을 제거하고 공개적으로 게시하지 마세요. 프로덕션의 경우 Azure 관리 ID와 같은 자격 증명을 안전하게 저장하고 액세스하는 방법을 사용합니다. 자세한 내용은 Azure Storage 보안을 참조하세요.

작업에 따라 다음 필드를 업데이트해야 할 수 있습니다.

  • endpoint
  • key
  • sourceURL
  • targetURL
  • glossaryURL
  • id(작업 ID)

id 값 찾기

  • POST 메서드 응답 헤더 Operation-Location URL 값에서 작업을 id 찾습니다. URL의 마지막 매개 변수는 작업의 작업 id입니다.
응답 헤더 결과 URL
Operation-Location https://<NAME-OF-YOUR-RESOURCE>.cognitiveservices.azure.com/translator/text/batch/v1.1/batches/9dce0aa9-78dc-41ba-8cae-2e2f3c2ff8ec
  • 작업 가져오기(GET) 요청을 사용하여 문서 번역 작업 id를 검색할 수도 있습니다.

문서 번역


    using System;
    using System.Net.Http;
    using System.Threading.Tasks;
    using System.Text;


    class Program
    {

        static readonly string route = "/batches";

        private static readonly string endpoint = "https://<NAME-OF-YOUR-RESOURCE>.cognitiveservices.azure.com/translator/text/batch/v1.1";

        private static readonly string key = "<YOUR-KEY>";

        static readonly string json = ("{\"inputs\": [{\"source\": {\"sourceUrl\": \"https://YOUR-SOURCE-URL-WITH-READ-LIST-ACCESS-SAS\",\"storageSource\": \"AzureBlob\",\"language\": \"en\"}, \"targets\": [{\"targetUrl\": \"https://YOUR-TARGET-URL-WITH-WRITE-LIST-ACCESS-SAS\",\"storageSource\": \"AzureBlob\",\"category\": \"general\",\"language\": \"es\"}]}]}");

        static async Task Main(string[] args)
        {
            using HttpClient client = new HttpClient();
            using HttpRequestMessage request = new HttpRequestMessage();
            {

                StringContent content = new StringContent(json, Encoding.UTF8, "application/json");

                request.Method = HttpMethod.Post;
                request.RequestUri = new Uri(endpoint + route);
                request.Headers.Add("Ocp-Apim-Subscription-Key", key);
                request.Content = content;

                HttpResponseMessage  response = await client.SendAsync(request);
                string result = response.Content.ReadAsStringAsync().Result;
                if (response.IsSuccessStatusCode)
                {
                    Console.WriteLine($"Status code: {response.StatusCode}");
                    Console.WriteLine();
                    Console.WriteLine($"Response Headers:");
                    Console.WriteLine(response.Headers);
                }
                else
                    Console.Write("Error");

            }

        }

    }

파일 형식 가져오기

지원되는 파일 형식 목록을 검색합니다. 성공한 경우 이 메서드는 200 OK 응답 코드를 반환합니다.


using System;
using System.Net.Http;
using System.Threading.Tasks;


class Program
{


    private static readonly string endpoint = "https://<NAME-OF-YOUR-RESOURCE>.cognitiveservices.azure.com/translator/text/batch/v1.1";

    static readonly string route = "/documents/formats";

    private static readonly string key = "<YOUR-KEY>";

    static async Task Main(string[] args)
    {

        HttpClient client = new HttpClient();
            using HttpRequestMessage request = new HttpRequestMessage();
            {
                request.Method = HttpMethod.Get;
                request.RequestUri = new Uri(endpoint + route);
                request.Headers.Add("Ocp-Apim-Subscription-Key", key);


                HttpResponseMessage response = await client.SendAsync(request);
                string result = response.Content.ReadAsStringAsync().Result;

                Console.WriteLine($"Status code: {response.StatusCode}");
                Console.WriteLine($"Response Headers: {response.Headers}");
                Console.WriteLine();
                Console.WriteLine(result);
            }
}

작업 상태 가져오기

단일 작업에 대한 현재 상태 문서 번역 요청의 모든 작업에 대한 요약을 가져옵니다. 성공한 경우 이 메서드는 200 OK 응답 코드를 반환합니다.


using System;
using System.Net.Http;
using System.Threading.Tasks;


class Program
{


    private static readonly string endpoint = "https://<NAME-OF-YOUR-RESOURCE>.cognitiveservices.azure.com/translator/text/batch/v1.1";

    static readonly string route = "/batches/{id}";

    private static readonly string key = "<YOUR-KEY>";

    static async Task Main(string[] args)
    {

        HttpClient client = new HttpClient();
            using HttpRequestMessage request = new HttpRequestMessage();
            {
                request.Method = HttpMethod.Get;
                request.RequestUri = new Uri(endpoint + route);
                request.Headers.Add("Ocp-Apim-Subscription-Key", key);


                HttpResponseMessage response = await client.SendAsync(request);
                string result = response.Content.ReadAsStringAsync().Result;

                Console.WriteLine($"Status code: {response.StatusCode}");
                Console.WriteLine($"Response Headers: {response.Headers}");
                Console.WriteLine();
                Console.WriteLine(result);
            }
    }
}

문서 상태 가져오기

간략한 개요

문서 번역 요청에서 특정 문서의 상태 검색합니다. 성공한 경우 이 메서드는 200 OK 응답 코드를 반환합니다.


using System;
using System.Net.Http;
using System.Threading.Tasks;


class Program
{


    private static readonly string endpoint = "https://<NAME-OF-YOUR-RESOURCE>.cognitiveservices.azure.com/translator/text/batch/v1.1";

    static readonly string route = "/{id}/document/{documentId}";

    private static readonly string key = "<YOUR-KEY>";

    static async Task Main(string[] args)
    {

        HttpClient client = new HttpClient();
            using HttpRequestMessage request = new HttpRequestMessage();
            {
                request.Method = HttpMethod.Get;
                request.RequestUri = new Uri(endpoint + route);
                request.Headers.Add("Ocp-Apim-Subscription-Key", key);


                HttpResponseMessage response = await client.SendAsync(request);
                string result = response.Content.ReadAsStringAsync().Result;

                Console.WriteLine($"Status code: {response.StatusCode}");
                Console.WriteLine($"Response Headers: {response.Headers}");
                Console.WriteLine();
                Console.WriteLine(result);
            }
}

작업 삭제

간략한 개요

현재 처리 중이거나 대기 중인 작업을 취소합니다. 번역이 시작되지 않은 문서만 취소됩니다.


using System;
using System.Net.Http;
using System.Threading.Tasks;


class Program
{


    private static readonly string endpoint = "https://<NAME-OF-YOUR-RESOURCE>.cognitiveservices.azure.com/translator/text/batch/v1.1";

    static readonly string route = "/batches/{id}";

    private static readonly string key = "<YOUR-KEY>";

    static async Task Main(string[] args)
    {

        HttpClient client = new HttpClient();
            using HttpRequestMessage request = new HttpRequestMessage();
            {
                request.Method = HttpMethod.Delete;
                request.RequestUri = new Uri(endpoint + route);
                request.Headers.Add("Ocp-Apim-Subscription-Key", key);


                HttpResponseMessage response = await client.SendAsync(request);
                string result = response.Content.ReadAsStringAsync().Result;

                Console.WriteLine($"Status code: {response.StatusCode}");
                Console.WriteLine($"Response Headers: {response.Headers}");
                Console.WriteLine();
                Console.WriteLine(result);
            }
}

일반적인 HTTP 상태 코드

HTTP 상태 코드 설명 가능한 원인
200 OK 요청에 성공했습니다.
400 Bad Request 필수 매개 변수가 없거나 비어 있거나 null입니다. 또는 필수 또는 선택적 매개 변수에 전달된 값이 잘못되었습니다. 일반적인 문제는 너무 긴 헤더입니다.
401 Unauthorized 요청에 부여된 권한이 없습니다. 키 또는 토큰이 유효하고 올바른 영역에 있는지 확인하세요. Azure portal에서 구독을 관리할 때 Azure AI 서비스 다중 서비스 리소스가 아닌번역기 단일 서비스 리소스를 사용하고 있는지 확인하세요.
429 요청이 너무 많음 구독에 허용되는 요청의 할당량 또는 비율을 초과했습니다.
502 잘못된 게이트웨이 네트워크 또는 서버 쪽 문제입니다. 잘못된 헤더를 나타낼 수도 있습니다.

자세한 정보

다음 단계