108. 간단 API 게이트웨이
Hard
바이브코딩
MCPAPISystem
문제 설명
[문제]
간단한 API 게이트웨이를 흉내 내는 MCP 서버를 구현한다. API 게이트웨이란 클라이언트가 보낸 요청 경로(endpoint, 예: "/api/test")를 보고 어떤 처리기(handler)가 맡을지 연결해 주는 중간 다리다. 이 서버는 단순화하여, 서버 인스턴스 안에 "엔드포인트 경로 -> 핸들러 이름"을 저장하는 사전(키와 값을 짝지어 보관하는 저장소)을 하나 유지한다. 초기 상태에서는 등록된 엔드포인트가 하나도 없다.
[구현할 함수]
- register_endpoint(endpoint: str, handler: str) -> int
엔드포인트 경로와 그것을 처리할 핸들러 이름을 짝지어 등록한다. 등록을 마친 뒤 현재 등록된 전체 엔드포인트 개수를 반환한다.
- route_request(endpoint: str, data: dict) -> str
요청 경로를 받아, 등록된 엔드포인트면 연결된 핸들러 이름을 반환한다. 등록되지 않은 경로면 빈 문자열 "" 을 반환한다. data 는 요청에 함께 전달되는 부가 데이터다.
- get_endpoints() -> List[str]
현재 등록된 모든 엔드포인트 경로의 배열을 반환한다. 하나도 없으면 빈 배열 [] 을 반환한다.
- rate_limit_check(endpoint: str, user_id: str) -> bool
호출 빈도 제한(rate limit) 통과 여부를 확인한다. 이 문제에서는 단순화하여 실제 제한을 두지 않고 항상 True 를 반환한다.
[입력/상태]
서버는 "엔드포인트 경로 -> 핸들러 이름" 사전 하나를 유지한다. endpoint, handler, user_id 는 문자열, data 는 임의의 키-값 묶음이다.
[제약]
- 초기 상태에는 등록된 엔드포인트가 없다.
- route_request 는 등록되지 않은 경로에 대해 빈 문자열을 돌려주며 오류를 내지 않는다.
[예시] (각 예시는 초기 빈 상태에서 시작)
register_endpoint("/api", "h") -> 1 # 첫 등록 후 전체 1개
get_endpoints() -> [] # 등록 전이면 빈 배열
route_request("/없음", {}) -> "" # 미등록 경로
rate_limit_check("/api", "u") -> True # 항상 통과
register_endpoint("/api/test", "h") -> 1
get_endpoints() -> ["/api/test"]
route_request("/api/test", {}) -> "h" # 연결된 핸들러 이름
로그인하고 풀기
AI가 자동 채점하고 즉시 정답·해설을 알려줘요. 무료.