Skip to content

Latest commit

ย 

History

History
113 lines (80 loc) ยท 3.77 KB

File metadata and controls

113 lines (80 loc) ยท 3.77 KB

Assembly API Client

Assembly API Client (๊ตญํšŒ ์˜คํ”ˆ API ํด๋ผ์ด์–ธํŠธ)

๋Œ€ํ•œ๋ฏผ๊ตญ ๊ตญํšŒ ์˜คํ”ˆ API(Open API)๋ฅผ ์œ„ํ•œ ๊ฐ•๋ ฅํ•˜๊ณ  ์œ ์—ฐํ•œ ๋น„๋™๊ธฐ Python ํด๋ผ์ด์–ธํŠธ์ž…๋‹ˆ๋‹ค.

์ฃผ์š” ๊ธฐ๋Šฅ (Features)

  • ๋™์  ์ŠคํŽ™ ํŒŒ์‹ฑ (Dynamic Spec Parsing): ์—‘์…€ ๋ช…์„ธ์„œ๋ฅผ ์ž๋™์œผ๋กœ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ํŒŒ์‹ฑํ•˜์—ฌ API ์—”๋“œํฌ์ธํŠธ๋ฅผ ๋™์ ์œผ๋กœ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.
  • ํƒ€์ž… ์•ˆ์ •์„ฑ (Type Safety): Pydantic ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ๊ฒ€์ฆํ•˜๊ณ  ์ž๋™ ์™„์„ฑ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. API์˜ ๋ถˆ๊ทœ์น™ํ•œ ๋ฐ์ดํ„ฐ ํƒ€์ž…(๋ฌธ์ž์—ด/์ˆซ์ž ํ˜ผ์šฉ)์—๋„ ์œ ์—ฐํ•˜๊ฒŒ ๋Œ€์‘ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐ•๋ ฅํ•œ ๋ณต์›๋ ฅ (Resilience): ๋‚ด์žฅ๋œ ์žฌ์‹œ๋„(Retry) ๋กœ์ง๊ณผ ์—๋Ÿฌ ํ•ธ๋“ค๋ง์œผ๋กœ ์•ˆ์ •์ ์ธ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ์ž๋™ํ™”๋œ ์—…๋ฐ์ดํŠธ (Automated Updates): ๋งค์ฃผ ์ž๋™์œผ๋กœ ์ตœ์‹  API ๋ช…์„ธ๋ฅผ ๋™๊ธฐํ™”ํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ์žฌ์ƒ์„ฑํ•˜๋Š” CI/CD ํŒŒ์ดํ”„๋ผ์ธ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • CLI ๋„๊ตฌ: API ๋ช…์„ธ ๋™๊ธฐํ™” ๋ฐ ๊ฒ€์ƒ‰์„ ์œ„ํ•œ ์ปค๋งจ๋“œ๋ผ์ธ ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์„ค์น˜ (Installation)

์ด ํ”„๋กœ์ ํŠธ๋Š” uv๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์˜์กด์„ฑ์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

# uv ์„ค์น˜ (์—†๋Š” ๊ฒฝ์šฐ)
curl -LsSf https://astral.sh/uv/install.sh | sh

# ๊ฐ€์ƒํ™˜๊ฒฝ ์ƒ์„ฑ ๋ฐ ํŒจํ‚ค์ง€ ์„ค์น˜
uv venv
source .venv/bin/activate
uv pip install assembly-api-client

์‚ฌ์šฉ๋ฒ• (Usage)

1. API ํ‚ค ์„ค์ • (API Key Configuration)

API ํ‚ค๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐฉ๋ฒ• A: ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์‚ฌ์šฉ (๊ถŒ์žฅ) .env ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

export ASSEMBLY_API_KEY="YOUR_API_KEY"

๋ฐฉ๋ฒ• B: ํด๋ผ์ด์–ธํŠธ ์ง์ ‘ ์ฃผ์ž…

client = AssemblyAPIClient(api_key="YOUR_API_KEY")

2. ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ์กฐํšŒ

import asyncio
from assembly_client.api import AssemblyAPIClient
from assembly_client.generated import Service

async def main():
    # ํ™˜๊ฒฝ ๋ณ€์ˆ˜๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ๋‹ค๋ฉด api_key ์ƒ๋žต ๊ฐ€๋Šฅ
    async with AssemblyAPIClient() as client:
        
        # ์„œ๋น„์Šค ID ๋˜๋Š” Enum์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์กฐํšŒ
        # ์˜ˆ: ๊ตญํšŒ์˜์› ๋ฐœ์˜๋ฒ•๋ฅ ์•ˆ ์กฐํšŒ
        data = await client.get_data(Service.๊ตญํšŒ์˜์›_๋ฐœ์˜๋ฒ•๋ฅ ์•ˆ, params={"AGE": "21"})
        
        for item in data:
            print(f"๋ฒ•์•ˆ๋ช…: {item.BILL_NAME}, ๋ฐœ์˜์ž: {item.PROPOSER}")

if __name__ == "__main__":
    asyncio.run(main())

3. CLI ์‚ฌ์šฉ (uv ๊ธฐ๋ฐ˜)

API ๋ช…์„ธ ๋™๊ธฐํ™”:

uv run python -m assembly_client.cli sync

์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ API ๋ชฉ๋ก ์กฐํšŒ:

uv run python -m assembly_client.cli list

์œ ์ง€๋ณด์ˆ˜ (Maintenance)

API ๋ช…์„ธ ๋ฐ Fixture ์—…๋ฐ์ดํŠธ

๊ตญํšŒ API๋Š” ์ˆ˜์‹œ๋กœ ๋ณ€๊ฒฝ๋˜๊ฑฐ๋‚˜ ์ƒˆ๋กœ์šด ์„œ๋น„์Šค๊ฐ€ ์ถ”๊ฐ€๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด API๊ฐ€ ์ถ”๊ฐ€๋˜๋ฉด sync ๋ช…๋ น์–ด๋กœ ๋ช…์„ธ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ณ , ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ Fixture๋„ ์ƒˆ๋กœ ๋ฐ›์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด ํ”„๋กœ์ ํŠธ๋Š” ๋งค์ผ ์ž๋™์œผ๋กœ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ํ™•์ธํ•˜๋„๋ก ์„ค์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ˆ˜๋™์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๋ ค๋ฉด:

# 1. ๋ช…์„ธ ๋™๊ธฐํ™” ๋ฐ ์ฝ”๋“œ ์žฌ์ƒ์„ฑ
./scripts/update_client.sh

# 2. (ํ•„์š”์‹œ) ์ƒˆ๋กœ์šด Fixture ์ƒ์„ฑ
# ์ƒˆ๋กœ์šด ์„œ๋น„์Šค๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ๋‹ค๋ฉด ํ•ด๋‹น ์„œ๋น„์Šค์˜ ์ƒ˜ํ”Œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„ ํ…Œ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ ๋ฐ ๊ธฐ์—ฌ (Development)

ํ…Œ์ŠคํŠธ ์‹คํ–‰

pytest

์ฝ”๋“œ ์žฌ์ƒ์„ฑ (์ˆ˜๋™)

./scripts/update_client.sh

๊ธฐ์—ฌํ•˜๊ธฐ (Contributing)

์ด ํ”„๋กœ์ ํŠธ์— ๊ธฐ์—ฌํ•˜๊ณ  ์‹ถ์œผ์‹œ๋‹ค๋ฉด ๊ธฐ์—ฌ ๊ฐ€์ด๋“œ๋ฅผ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”. ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ๊ทœ์•ฝ ๋ฐ ์ž๋™ ๋ฐฐํฌ ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์„ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ผ์ด์„ ์Šค (License)

MIT License