마이크로서비스의 API를 설계할 때 참고할 수 있는 패턴들을 소개하는 책이다. 이 패턴은 입증되고 재사용 가능한 솔루션 엘리먼트를 통해 API 설계 및 발전의 복잡성을 극복하는 데 도움을 주는 것을 목표로 패턴 커뮤니티는 피드백 프로세스를 통해 정립된 내용을 소개한다. HTTP, 웹 API, 서비스 지향 아키텍처를 포함한 일반적인 통합 아키텍처에 적용 가능한 패턴뿐 아니라, 개별 API 엔드포인트와 메시지 교환과 관련된 패턴 그리고 API의 진화와 관련된 패턴도 소개한다. 이러한 패턴들은 프로그램 내부 API가 아닌 원격 API(remote API)에 초점을 맞춰 클라이언트 측과 프로바이더 측 모두에서 개발자 경험을 개선하는 것을 목표로 한다.
Contents
1부. 기초와 내러티브
01장.애플리케이션 프로그래밍 인터페이스(API) 기초
__로컬 API에서 원격 API로
____분산과 원격에 대한 간략한 역사
____원격 API: 통합을 위한 프로토콜 기반 서비스 액세스
____API의 중요성
__API 설계의 의사 결정 드라이버
____API를 성공하게 하는 것
____여러 API 설계 방법
____API 설계가 어려운 이유
____아키텍처적으로 중요한 요구 사항
____개발자 경험
__원격 API의 도메인 모델
____커뮤니케이션 참가자
____엔드포인트 제공 동작을 설명하는 계약
____대화의 빌딩 블록으로서의 메시지
____메시지 구조 및 표현
____API 계약
____책 전반에서 사용되는 도메인 모델
__요약
__
02장.호반 상호 보험 사례 연구
__비즈니스 콘텍스트 및 요구 사항
____사용자 스토리 및 요구되는 품질
____분석 수준 도메인 모델
__아키텍처 개요
____시스템 콘텍스트
____애플리케이션 아키텍처
__API 설계 활동
__목표 API 사양
__요약
__
03장.API 의사 결정 관련 사항
__들어가기: 의사 결정 옵션으로서의 패턴, 의사 결정 기준으로서의 포스
__기본적인 API 의사 결정과 패턴
____API 가시성
____API 통합 타입
____API 문서화
__API 역할과 책임에 대한 의사 결정
____엔드포인트의 아키텍처 역할
____정보 보유자 역할 정제
____동작 책임 정의
__메시지 표현 패턴 선택하기
____표현 엘리먼트의 평면 구조와 중첩 구조
____엘리먼트 스테레오타입
__중간 짚어보기: 호반 상호 보험 사례의 책임과 구조 패턴
__API 품질 거버닝
____API 클라이언트의 식별 및 인증
____API 사용량에 대한 미터링 및 과금
____API 클라이언트의 과도한 API 사용 방지
____품질 목표 및 페널티의 명시적 지정
____오류에 대한 커뮤니케이션
____명시적 콘텍스트 표현
__API 품질 개선을 위한 의사 결정
____페이지네이션
____불필요한 데이터 전송을 피하는 다른 방법
____메시지에서 참조된 데이터 처리
__API 진화에 대한 의사 결정
____버전 및 호환성 관리
____버전의 도입 및 폐기를 위한 전략
__중간 짚어보기: 호반 상호 보험 사례의 품질 및 진화 패턴
__요약
__
__
2부. 패턴
04장.패턴 언어 개요
__위치와 범위
__패턴: 왜 그리고 어떻게?
__패턴 탐색
____구조의 구성: 범위별 패턴 찾기
____테마별 분류: 주제별 패턴 찾기
____시간 차원: 설계 개선 단계 따르기
____탐색 방법
__기초 패턴: API 가시성 및 통합 타입
____패턴: 프론트엔드 통합
____패턴: 백엔드 통합
____패턴: 퍼블릭 API
____패턴: 커뮤니티 API
____패턴: 솔루션 내부 API
____기초 패턴 요약
__기본 구조 패턴
____패턴: 아토믹 파라미터
____패턴: 아토믹 파라미터 리스트
____패턴: 파라미터 트리
____패턴: 파라미터 포리스트
____기본 구조 패턴 요약
__요약
__
05장.엔드포인트 타입과 동작 정의
__API 역할 및 책임의 소개
____도전 과제와 요구되는 품질
____패턴 설명
__엔드포인트 역할: 서비스 세분성
____패턴: 처리 리소스
____패턴: 정보 보유자 리소스
____패턴: 운용 데이터 보유자
____패턴: 마스터 데이터 보유자
____패턴: 참조 데이터 보유자
____패턴: 링크 조회 리소스
____패턴: 데이터 전송 리소스
__동작 책임
____패턴: 상태 생성 동작
____패턴: 인출 동작
____패턴: 상태 전이 동작
____패턴: 계산 함수
__요약
__
06장.요청 및 응답 메시지 표현 설계
__메시지 표현 설계 소개
____메시지 표현을 설계할 때의 과제
____6장의 패턴
__엘리먼트 스테레오타입
____패턴: 데이터 엘리먼트
____패턴: 메타데이터 엘리먼트
____패턴: ID 엘리먼트
____패턴: 링크 엘리먼트
__특수 목적 표현
____패턴: API 키
____패턴: 오류 보고
____패턴: 콘텍스트 표현
__요약
__
07장.품질을 위한 메시지 설계 개선
__API 품질 개요
____API 품질의 개선 관련 도전 과제
____7장의 패턴
__메시지 세분성
____패턴: 임베디드 엔티티
____패턴: 링크된 정보 보유자
__클라이언트 주도 메시지 콘텐츠 또는 응답 셰이핑
____패턴: 페이지네이션
____패턴: 위시 리스트
____패턴: 위시 템플릿
__메시지 교환 최적화(대화 효율성)
____패턴: 조건부 요청
____패턴: 요청 번들
__요약
__
08장.API 진화
__API 진화 소개
____API를 진화시킬 때의 도전 과제
____8장의 패턴
__버전 관리 및 호환성 관리
____패턴: 버전 식별자
____패턴: 시맨틱 버전 관리
__수명주기 관리 보장
____패턴: 실험적 미리 보기
____패턴: 공격적 폐기
____패턴: 제한적 수명 보장
____패턴: 2개의 상용 버전
__요약
__
09장.API 계약 문서화 및 커뮤니케이션
__API 문서화 개요
____API 문서화의 도전 과제
____9장의 패턴
__문서화 패턴
____패턴: API 설명
____패턴: 요금 책정 플랜
____패턴: 사용 비율 제한
____패턴: 서비스 수준 계약
__요약
__
__
3부. 패턴 사용의 현재와 미래
10장.실제 패턴 사례
__스위스 모기지 분야의 대규모 비즈니스 프로세스 통합
____비즈니스 콘텍스트 및 도메인
____기술적 과제
____API의 역할과 현황
____패턴 사용 및 구현
____회고 및 전망
__건설 영역의 제안 및 주문 프로세스
____비즈니스 콘텍스트 및 도메인
____기술적 과제
____API의 역할 및 현황
____패턴 사용 및 구현
____회고 및 전망
__요약
__11장.결론
__짧은 회고
__API 관련 연구: 패턴, MDSL 등으로 리팩토링
__API의 미래
__추가 참고 내용
__최종 코멘트
부록 A.엔드포인트 식별 및 패턴 선택 가이드
부록 B.호반 상호 보험 사례의 구현
부록 C.마이크로서비스 도메인 특화 언어(MDSL)
Author
올라프 짐머만,미르코 스토커,다니엘 뤼브케,우베 즈둔,세자레 파우타소,이승범
아키텍처 의사 결정 모델링으로 박사 학위를 받은 오랜 경력의 서비스 오리엔티드 기반 설계자다. 이스턴 스위스 응용과학대학교(Eastern Switzerland University of Applied Sciences) 소프트웨어 연구소의 컨설턴트 겸 소프트웨어 아키텍처 교수로서 애자일 아키텍처, 애플리케이션 통합, 클라우드 네이티브, 도메인 중심 설계, 서비스 지향 시스템을 중점적으로 연구하고 있다. 이전에는 ABB와 IBM에서 소프트웨어 설계자로 일하면서 전 세계의 e-비즈니스 및 엔터프라이즈 애플리케이션 개발 고객을 확보했으며, 그 이전에는 시스템 및 네트워크 관리 미들웨어를 개발했다. The Open Group의 저명한(수석/리더) IT 아키텍트이며 IEEE Software의 [Insights] 칼럼을 공동 편집하고 있다. 웹 서비스에 대한 관점 및 최초의 IBM 레드북인 『Eclipse』의 저자이기도 하다. ozimmer.ch와 medium.com/olzzio에서 블로그를 운영한다.
아키텍처 의사 결정 모델링으로 박사 학위를 받은 오랜 경력의 서비스 오리엔티드 기반 설계자다. 이스턴 스위스 응용과학대학교(Eastern Switzerland University of Applied Sciences) 소프트웨어 연구소의 컨설턴트 겸 소프트웨어 아키텍처 교수로서 애자일 아키텍처, 애플리케이션 통합, 클라우드 네이티브, 도메인 중심 설계, 서비스 지향 시스템을 중점적으로 연구하고 있다. 이전에는 ABB와 IBM에서 소프트웨어 설계자로 일하면서 전 세계의 e-비즈니스 및 엔터프라이즈 애플리케이션 개발 고객을 확보했으며, 그 이전에는 시스템 및 네트워크 관리 미들웨어를 개발했다. The Open Group의 저명한(수석/리더) IT 아키텍트이며 IEEE Software의 [Insights] 칼럼을 공동 편집하고 있다. 웹 서비스에 대한 관점 및 최초의 IBM 레드북인 『Eclipse』의 저자이기도 하다. ozimmer.ch와 medium.com/olzzio에서 블로그를 운영한다.