목차
1부. API 디자인 기초

1. API 디자인이란 무엇인가?
1.1 API란 무엇인가?
1.1.1 소프트웨어를 위한 웹 인터페이스
1.1.2 소프트웨어를 레고처럼 바꾼다
1.2 API 디자인이 중요한 이유
1.2.1 퍼블릭, 프라이빗 API는 다른 개발자들도 사용한다
1.2.2 API는 구현을 숨겨준다
1.2.3 API를 어설프게 디자인하면 끔찍한 결과가 이어진다
1.3 API 디자인에 필요한 요소
1.3.1 프로그래밍 인터페이스 이상의 디자인 원리 이해
1.3.2 API 디자인의 모든 측면

2. 사용자를 위한 API 디자인하기
2.1 일상 속 사용자 인터페이스를 디자인하는 올바른 관점
2.1.1 작업 방식에 집중하면 인터페이스가 복잡해진다
2.1.2 사용자가 할 수 있는 일에 집중하면 인터페이스는 단순해진다
2.2 소프트웨어 인터페이스 디자인 방법
2.2.1 API를 소프트웨어의 제어판처럼 바라보기
2.2.2 컨슈머의 관점에 집중해 단순한 API를 만들기
2.3 API의 목표 식별 과정
2.3.1 무엇을 어떻게 하는가
2.3.2 어떤 걸 입력하고 어떤 게 출력되는가
2.3.3 누락된 목표가 있는가
2.3.4 모든 사용자를 찾아냈는가
2.3.5 API 목표 캔버스
2.4 API 디자인에서 피해야 할 프로바이더 관점
2.4.1 데이터가 미치는 영향
2.4.2 코드와 비즈니스 로직이 주는 영향
2.4.3 소프트웨어 아키텍처에서 받는 영향
2.4.4 인적 조직으로 인한 영향
2.4.5 API 목표 캔버스에서 프로바이더 관점 찾기

3. 프로그래밍 인터페이스 디자인하기
3.1 REST API 소개
3.1.1 REST API 호출 분석
3.1.2 HTTP의 기초사항
3.1.3 REST API의 기초원리
3.2 API 목표를 REST API로 변형하는 과정
3.2.1 API 목표 캔버스로 리소스와 리소스 사이 관계 식별
3.2.2 API 목표 캔버스를 이용해 액션과 액션의 파라미터 그리고 반환값 식별
3.2.3 경로를 포함한 리소스 표현
3.2.4 HTTP로 액션 표현
3.2.5 REST API와 HTTP 치트시트
3.3 API 데이터 디자인하기
3.3.1 컨셉(Concept) 디자인
3.3.2 컨셉에서 리스폰스 디자인
3.3.3 컨셉과 리스폰스에서 파라미터 디자인
3.3.4 데이터 소스에서 파라미터 확인
3.3.5 그 외의 파라미터들 디자인
3.4 디자인적 난관에 봉착했을 때 균형 유지하는 법
3.4.1 REST 절충안 예시
3.4.2 사용자 편의성과 규칙 준수 균형잡기
3.5 API를 디자인할 때 REST가 중요한 이유
3.5.1 REST 아키텍처 스타일 소개
3.5.2 API 디자인에서의 REST 제약사항이 미치는 영향

4. API 명세 포맷을 이용한 API 디자인
4.1 API 명세 포맷이란 무엇인가?
4.1.1 OAS(OpenAPI Specification) 소개
4.1.2 왜 API 명세 포맷을 사용해야 하는가?
4.1.3 API 명세 포맷을 사용해야 할 때
4.2 OAS를 통한 API 리소스와 액션 설명
4.2.1 OAS 문서 생성
4.2.2 리소스 설명
4.2.3 리소스의 동작 설명
4.3 OpenAPI와 JSON Schema로 API 데이터 표현하기
4.3.1 쿼리 파라미터 묘사
4.3.2 JSON Schema를 통한 데이터 묘사
4.3.3 리스폰스 묘사
4.3.4 바디 파라미터 묘사
4.4 OAS에서 API를 효율적으로 묘사하기
4.4.1 컴포넌트 재사용하기
4.4.2 패스 파라미터(Path parameter) 묘사하기

2부 사용하기 좋은 API 디자인

5. 직관적인 API 디자인하기
5.1 직관적인 표현
5.1.1 명확한 이름 정하기
5.1.2 사용하기 쉬운 데이터 타입과 포맷 정하기
5.1.3 바로 사용할 수 있는 데이터 선택하기
5.2 직관적인 상호작용
5.2.1 직관적인 입력 요청하기
5.2.2 발생 가능한 모든 에러 피드백 식별하기
5.2.3 유용한 에러 피드백 반환하기
5.2.4 철저한 에러 피드백 반환하기
5.2.5 유용한 성공 피드백 반환하기
5.3 직관적인 흐름
5.3.1 직관적인 목표 연쇄 만들기
5.3.2 에러 방지
5.3.3 목표 통합
5.3.4 상태가 없는 흐름 디자인하기

6. 예측 가능한 API 디자인하기
6.1 일관성 유지하기
6.1.1 일관된 데이터 디자인하기
6.1.2 일관적인 목표 디자인하기
6.1.3 일관성의 4단계
6.1.4 타인을 따라하자: 일반적인 관행과 표준 준수하기
6.1.5 유지하기 어렵고 현명하게 적용해야하는 일관성
6.2 적응 가능하게 하기
6.2.1 다른 포맷으로 제공하거나 응답하기
6.2.2 국제화와 현지화
6.2.3 필터, 페이지, 정렬 적용하기
6.3 탐색 가능하게 하기
6.3.1 메타데이터 제공하기
6.3.2 하이퍼미디어 API 만들기
6.3.3 HTTP 프로토콜의 장점 이용하기

7. 간결하고 체계적인 API 디자인하기
7.1 API 구조화
7.1.1 데이터 구조화하기
7.1.2 피드백 구조화하기
7.1.3 목표 구조화하기
7.2 API 사이징
7.2.1 데이터 세분화 선택하기
7.2.2 목표 세분화 선택하기
7.2.3 API 세분화 선택하기

3부 상황에 맞는 API 디자인

8. 안전한 API 디자인하기
8.1 API 보안의 개요
8.1.1 컨슈머 등록하기
8.1.2 API 사용을 위해 자격증명 가져오기
8.1.3 API 호출하기
8.1.4 보안성 관점에서 API 구상하기
8.2 API 분할을 통한 접근 제어 활성화
8.2.1 유연하고 정제된 스코프 정의하기
8.2.2 단순하지만 더 굵직한 스코프로 정의하기
8.2.3 스코프 전략 선택하기
8.2.4 API 명세 포맷으로 스코프 정의하기
8.3 접근 제어를 고려한 설계
8.3.1 접근 제어에 필요한 데이터 이해하기
8.3.2 필요에 따른 디자인 조정
8.4 민감 요소의 취급
8.4.1 민감한 데이터 취급하기
8.4.2 민감한 목표 취급하기
8.4.3 안전한 에러 피드백 디자인하기
8.4.4 아키텍처와 프로토콜 이슈 식별하기

9. API 디자인 발전시키기
9.1 API 진화 디자인
9.1.1 출력 데이터의 브레이킹 체인지 회피하기
9.1.2 입력데이터와 파라미터에서 브레이킹 체인지 회피하기
9.1.3 성공과 에러 피드백에서 브레이킹 체인지 회피하기
9.1.4 목표와 흐름에서 브레이킹 체인지 회피하기
9.1.5 브레이킹 체인지의 보안 취약점 발생 회피하기
9.1.6 보이지 않는 인터페이스 컨트랙트에 주의하기
9.1.7 브레이킹 체인지를 유발하는 것이 항상 문제는 아닙니다.
9.2 API 버전 정하기
9.2.1 API 버전 관리와 구현 버전 관리 비교
9.2.2 컨슈머 관점에서 API 버전 표현 선택하기
9.2.3 API 버저닝의 세분화 정하기
9.2.4 API 버저닝이 디자인을 넘어 미치는 영향들
9.3 API를 디자인할 때 확장성(Extensibility)을 명심하기
9.3.1 확장 가능한 데이터 디자인하기
9.3.2 확장가능한 상호작용 디자인하기
9.3.3 확장 가능한 흐름 디자인하기
9.3.4 확장가능한 API 디자인하기

10. 네트워크 효율적인 API 디자인하기
10.1 네트워크 커뮤니케이션의 고려사항의 개요
10.1.1 장면 설정
10.1.2 문제 분석하기
10.2 프로토콜 레벨에서 네트워크 커뮤니케이션 효율성 보장하기
10.2.1 압축(Compression)과 지속적인 연결(Persistent connections) 활성화하기
10.2.2 캐싱(Caching)과 조건부 리퀘스트(Conditional request) 활성화 하기
10.2.3 캐시 정책 선택하기
10.3 디자인 레벨에서 네트워크 커뮤니케이션 효율성 확보하기
10.3.1 필터링(Filtering) 활성화 하기
10.3.2 목록 표현을 위한 연관된 데이터 선택하기
10.3.3 데이터 집합체 만들기(Aggregating)
10.3.4 다른 표현 제안하기
10.3.5 확장 활성화하기
10.3.6 쿼리 활성화하기
10.3.7 보다 연관성 있는 데이터와 목표 제공하기
10.3.8 다른 API 레이어 생성하기

11. 컨텍스트에 맞는 API 디자인하기
11.1 데이터와 목표와 성격에 맞는 커뮤니케이션 적용하기
11.1.1 처리 시간이 오래 걸리는 작업 관리하기
11.1.2 컨슈머에게 이벤트 알리기
11.1.3 이벤트 흐름 스트리밍(Streaming)하기
11.1.4 여러 요소(Element) 처리하기
11.2 전체 컨텍스트 이해하기
11.2.1 컨슈머의 기존 관행과 제약사항 숙지하기
11.2.2 프로바이더의 한계를 신중하게 고려하기
11.3 컨텍스트에 맞는 API 스타일 선택하기
11.3.1 리소스, 데이터, 함수 기반 API 비교
11.3.2 리퀘스트/리스폰스와 HTTP 기반의 API를 넘어서 생각하기

12. API 문서화 하기
12.1 참조 문서 만들기
12.1.1 데이터 모델 문서화
12.1.2 목표 문서화하기
12.1.3 보안 문서화하기
12.1.4 API의 개요 제공하기
12.1.5 세부구현에서 문서 추출하기: 장점과 단점
12.2 사용자 안내서 작성하기
12.2.1 유즈케이스 문서화하기
12.2.2 보안 문서화하기
12.2.3 일반적인 동작들과 원칙에 대한 개요 제공하기
12.2.4 정적(Static) 문서화를 넘어서 생각하기
12.3 구현 담당자에게 적절한 정보 제공하기
12.4 문서의 개정과 폐기

13. 성장하는 API
13.1 API 생명주기(Lifecycle)
13.2 API 디자인 지침 만들기
13.2.1 API 디자인 지침에 포함되는 내용들
13.2.2 지속적으로 지침 만들기
13.3 API 리뷰하기
13.3.1 요구사항에 도전하고 분석하기
13.3.2 디자인 린트하기(Linting)
13.3.3 프로바이더 관점에서 디자인 리뷰하기
13.3.4 컨슈머 관점에서 디자인 리뷰하기
13.3.5 구현 검증하기
13.4 소통하고 공유하기
닫기