Chapter 05: API 인터페이스

弘益人間
통일된 API로 모든 개발자가 접근 가능

5.1 RESTful API 설계

API는 언어 AI 시스템에 접근하는 관문입니다. WIA-LANG-005 Phase 2는 일관되고 직관적이며 확장 가능한 API를 정의합니다.

// API 기본 구조
const BASE_URL = 'https://api.wia-lang-005.org/v1';

interface APIRequest {
  language: string;      // ISO 639-3 코드
  input: any;
  options?: RequestOptions;
}

interface APIResponse<T> {
  status: 'success' | 'error';
  data: T;
  metadata: {
    requestId: string;
    timestamp: string;
    latencyMs: number;
    modelVersion: string;
  };
  usage: {
    characters: number;
    tokens: number;
    creditsUsed: number;
  };
}

5.2 핵심 API 엔드포인트

엔드포인트메서드기능용도
/v1/translatePOST번역텍스트 번역
/v1/asrPOST음성 인식음성→텍스트
/v1/ttsPOST음성 합성텍스트→음성
/v1/completePOST텍스트 생성자동 완성
/v1/analyzePOST언어 분석형태소/품사
/v1/languagesGET언어 목록지원 언어 조회

번역 API

// 번역 API 클라이언트
class TranslationClient {
  private apiKey: string;

  constructor(apiKey: string) {
    this.apiKey = apiKey;
  }

  async translate(request: TranslateRequest): Promise<TranslateResponse> {
    const response = await fetch(`${BASE_URL}/translate`, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'Authorization': `Bearer ${this.apiKey}`,
        'X-WIA-Version': '1.0.0'
      },
      body: JSON.stringify({
        source_language: request.sourceLanguage,
        target_language: request.targetLanguage,
        text: request.text,
        options: {
          formality: request.formality || 'polite',
          domain: request.domain || 'general',
          alternatives: request.alternatives || 3
        }
      })
    });

    return response.json();
  }
}

// 사용 예시
const client = new TranslationClient('your-api-key');
const result = await client.translate({
  sourceLanguage: 'ain',
  targetLanguage: 'ja',
  text: 'イランカラプテ',
  formality: 'polite'
});

console.log(result.data.translation);  // 'こんにちは'
console.log(result.data.confidence);   // 0.92

음성 인식 API (ASR)

// ASR API
interface ASRRequest {
  audio: string;       // Base64 인코딩
  language: string;
  format: 'wav' | 'mp3' | 'flac';
  sampleRate?: number;
}

interface ASRResponse {
  transcription: string;
  confidence: number;
  timestamps: WordTimestamp[];
  alternatives?: Alternative[];
}

async function transcribeAudio(
  audioFile: File,
  language: string
): Promise<ASRResponse> {
  const base64Audio = await fileToBase64(audioFile);

  const response = await fetch(`${BASE_URL}/asr`, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': `Bearer ${API_KEY}`
    },
    body: JSON.stringify({
      audio: base64Audio,
      language: language,
      format: 'wav',
      options: {
        timestamps: true,
        punctuation: true,
        profanity_filter: false
      }
    })
  });

  return response.json();
}

5.3 인증 및 권한

권한 레벨용도Rate Limit기능
Free개발/테스트100 req/day기본 API
Developer프로덕션10,000 req/day+ 배치 처리
Enterprise대규모무제한+ 전용 인프라
Community언어 공동체무제한자체 언어 전용
✅ 언어 공동체 특별 권한: 자체 언어에 대해서는 무제한 무료 접근이 보장됩니다. 弘益人間 철학에 따라 언어의 주인이 기술의 혜택을 받아야 합니다.

5.4 SDK 구현

// TypeScript SDK
import { WIALangClient } from '@wia/lang-005-sdk';

const client = new WIALangClient({
  apiKey: process.env.WIA_API_KEY,
  defaultLanguage: 'ain',
  timeout: 30000
});

// 번역
const translation = await client.translate({
  text: 'イランカラプテ',
  to: 'ja'
});

// 음성 인식
const transcription = await client.transcribe(audioBuffer, {
  language: 'ain',
  format: 'wav'
});

// 음성 합성
const audio = await client.synthesize('イランカラプテ', {
  language: 'ain',
  voice: 'reiko',
  speed: 1.0
});

// 스트리밍 번역
for await (const chunk of client.translateStream(longText, 'ja')) {
  process.stdout.write(chunk);
}

📚 핵심 요약

  1. RESTful 설계: 직관적인 엔드포인트와 일관된 요청/응답 형식을 제공합니다.
  2. 핵심 API: 번역, ASR, TTS, 텍스트 생성, 언어 분석을 지원합니다.
  3. 인증 체계: API 키 + JWT 토큰으로 보안을 유지합니다.
  4. 공동체 권한: 언어 공동체에 무제한 무료 접근을 보장합니다.
  5. SDK 제공: TypeScript, Python, Java SDK로 개발 편의성을 높입니다.
  6. 스트리밍: 대용량 처리를 위한 스트리밍 API를 지원합니다.
  7. 弘益人間: 통일된 API로 모든 개발자가 저자원 언어 AI에 접근할 수 있습니다.

✏️ 복습 문제

1.

RESTful API 설계 원칙과 WIA-LANG-005 적용 방식을 설명하시오.

2.

번역 API의 요청/응답 구조를 구현하시오.

3.

ASR API에서 스트리밍 처리가 필요한 이유를 논하시오.

4.

언어 공동체 특별 권한의 의미와 弘益人間 철학의 연관성을 설명하시오.

5.

Rate Limiting 구현 방법과 공정한 자원 분배 전략을 제시하시오.

6.

SDK 설계 시 고려해야 할 사용자 경험 요소를 나열하시오.

7.

TranslationClient 클래스를 에러 처리를 포함하여 확장 구현하시오.

8.

GraphQL vs REST API의 장단점을 저자원 언어 AI 맥락에서 비교하시오.

© 2025 SmileStory Co., Ltd. / WIA · 弘益人間

📐 시뮬레이터 패널 4