I Built a News API Before I Had Users. Here's What I'm Learning.
개요
NewTqnia는 웹사이트, RSS, JSON API, 임베더블 위젯 등 여러 제공 표면을 지원하면서 단일 API로 콘텐츠를 제공하려는 시도를 공유합니다.
주요 내용
- API 설계: API를 처음부터 작게 설계하여 불안정한 계약을 최소화했습니다. "today", "latest"와 같은 제한된 쿼리 파라미터를 지원하며, 요청당 60회 제한, ETag 및 Cache-Control 헤더를 포함합니다.
- 위젯 구현: 사용자가 HTTP 클라이언트를 작성하지 않고도 헤드라인을 웹사이트에 표시할 수 있도록 JavaScript 위젯을 개발했습니다. iframe, Shadow DOM, scoped CSS 등 다양한 격리 전략의 복잡성을 고려하여 현재는 data-\* 속성을 사용하는 스크립트 방식을 채택했습니다.
- 타임라인 데이터 모델: 기사와 달리 타임라인은 여러 사건의 관계를 설명하므로, 날짜, 사건 유형, 출처, 언어별 캡션 등 구조화된 필드로 데이터를 관리합니다. 이로 인해 편집상의 문제(예: 출처 간 불일치)가 발생할 수 있습니다.
- 이중 언어 지원: 초기 이중 언어 모델은 각 언어별 필드를 명시적으로 두었으나, 언어 수가 증가하면 확장성이 떨어질 수 있음을 인지하고 있습니다. 세 번째 언어 추가 전에 데이터 모델 재고를 고려합니다.
- 미디어 관리: 타임라인에 이벤트별 이미지가 사용되면서 미디어가 별도의 하위 시스템으로 발전했습니다. 안정적인 ID, 처리 상태, 다양한 반응형 변형, 대체 텍스트 및 캡션, 출처 및 라이선스 정보를 포함하는 미디어 레코드를 관리합니다.
- 배포 및 저작권: 콘텐츠의 이식성이 높아질수록 사용 방식에 대한 통제력이 줄어들기 때문에, API 소비자가 기사 URL을 보존하고 명확한 출처를 표시하도록 요구하는 사회적 계약에 의존하고 있습니다.
시사점
NewTqnia의 경험은 사용자 요구사항이 명확하지 않은 초기 단계에서 API를 구축할 때 겪는 기술적, 편집적, 배포적 트레이드오프와 학습 과정을 보여줍니다.
원문을 불러오는 중...
댓글
GitHub Discussions