๋ํ๋ฏผ๊ตญ ๊ตญํ ์คํ API(Open API)๋ฅผ ์ํ ๊ฐ๋ ฅํ๊ณ ์ ์ฐํ ๋น๋๊ธฐ Python ํด๋ผ์ด์ธํธ์ ๋๋ค.
- ๋์ ์คํ ํ์ฑ (Dynamic Spec Parsing): ์์ ๋ช ์ธ์๋ฅผ ์๋์ผ๋ก ๋ค์ด๋ก๋ํ๊ณ ํ์ฑํ์ฌ API ์๋ํฌ์ธํธ๋ฅผ ๋์ ์ผ๋ก ํด๊ฒฐํฉ๋๋ค.
- ํ์ ์์ ์ฑ (Type Safety): Pydantic ๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ํ์ ์ ๊ฒ์ฆํ๊ณ ์๋ ์์ฑ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. API์ ๋ถ๊ท์นํ ๋ฐ์ดํฐ ํ์ (๋ฌธ์์ด/์ซ์ ํผ์ฉ)์๋ ์ ์ฐํ๊ฒ ๋์ํฉ๋๋ค.
- ๊ฐ๋ ฅํ ๋ณต์๋ ฅ (Resilience): ๋ด์ฅ๋ ์ฌ์๋(Retry) ๋ก์ง๊ณผ ์๋ฌ ํธ๋ค๋ง์ผ๋ก ์์ ์ ์ธ ๋ฐ์ดํฐ ์์ง์ด ๊ฐ๋ฅํฉ๋๋ค.
- ์๋ํ๋ ์ ๋ฐ์ดํธ (Automated Updates): ๋งค์ฃผ ์๋์ผ๋ก ์ต์ API ๋ช ์ธ๋ฅผ ๋๊ธฐํํ๊ณ ์ฝ๋๋ฅผ ์ฌ์์ฑํ๋ CI/CD ํ์ดํ๋ผ์ธ์ด ํฌํจ๋์ด ์์ต๋๋ค.
- CLI ๋๊ตฌ: API ๋ช ์ธ ๋๊ธฐํ ๋ฐ ๊ฒ์์ ์ํ ์ปค๋งจ๋๋ผ์ธ ๋๊ตฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ด ํ๋ก์ ํธ๋ uv๋ฅผ ์ฌ์ฉํ์ฌ ์์กด์ฑ์ ๊ด๋ฆฌํ๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค.
# uv ์ค์น (์๋ ๊ฒฝ์ฐ)
curl -LsSf https://astral.sh/uv/install.sh | sh
# ๊ฐ์ํ๊ฒฝ ์์ฑ ๋ฐ ํจํค์ง ์ค์น
uv venv
source .venv/bin/activate
uv pip install assembly-api-clientAPI ํค๋ ๋ ๊ฐ์ง ๋ฐฉ์์ผ๋ก ์ค์ ํ ์ ์์ต๋๋ค.
๋ฐฉ๋ฒ A: ํ๊ฒฝ ๋ณ์ ์ฌ์ฉ (๊ถ์ฅ)
.env ํ์ผ์ ์์ฑํ๊ฑฐ๋ ํ๊ฒฝ ๋ณ์๋ฅผ ์ค์ ํฉ๋๋ค.
export ASSEMBLY_API_KEY="YOUR_API_KEY"๋ฐฉ๋ฒ B: ํด๋ผ์ด์ธํธ ์ง์ ์ฃผ์
client = AssemblyAPIClient(api_key="YOUR_API_KEY")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())API ๋ช ์ธ ๋๊ธฐํ:
uv run python -m assembly_client.cli sync์ฌ์ฉ ๊ฐ๋ฅํ API ๋ชฉ๋ก ์กฐํ:
uv run python -m assembly_client.cli list๊ตญํ API๋ ์์๋ก ๋ณ๊ฒฝ๋๊ฑฐ๋ ์๋ก์ด ์๋น์ค๊ฐ ์ถ๊ฐ๋ ์ ์์ต๋๋ค.
์๋ก์ด API๊ฐ ์ถ๊ฐ๋๋ฉด sync ๋ช
๋ น์ด๋ก ๋ช
์ธ๋ฅผ ์
๋ฐ์ดํธํ๊ณ , ํ
์คํธ๋ฅผ ์ํ Fixture๋ ์๋ก ๋ฐ์์ผ ํฉ๋๋ค.
์ด ํ๋ก์ ํธ๋ ๋งค์ผ ์๋์ผ๋ก ๋ณ๊ฒฝ์ฌํญ์ ํ์ธํ๋๋ก ์ค์ ๋์ด ์์ต๋๋ค. ์๋์ผ๋ก ์ ๋ฐ์ดํธํ๋ ค๋ฉด:
# 1. ๋ช
์ธ ๋๊ธฐํ ๋ฐ ์ฝ๋ ์ฌ์์ฑ
./scripts/update_client.sh
# 2. (ํ์์) ์๋ก์ด Fixture ์์ฑ
# ์๋ก์ด ์๋น์ค๊ฐ ์ถ๊ฐ๋์๋ค๋ฉด ํด๋น ์๋น์ค์ ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ํ
์คํธ์ ์ถ๊ฐํด์ผ ํฉ๋๋ค.pytest./scripts/update_client.sh์ด ํ๋ก์ ํธ์ ๊ธฐ์ฌํ๊ณ ์ถ์ผ์๋ค๋ฉด ๊ธฐ์ฌ ๊ฐ์ด๋๋ฅผ ์ฐธ๊ณ ํด ์ฃผ์ธ์. ์ปค๋ฐ ๋ฉ์์ง ๊ท์ฝ ๋ฐ ์๋ ๋ฐฐํฌ ํ๋ก์ธ์ค์ ๋ํ ์์ธํ ๋ด์ฉ์ ํ์ธํ์ค ์ ์์ต๋๋ค.
MIT License