일상 속 사물이 알려주는 웹 API 디자인
【책 소개】
일상 속에서 찾는 웹 API의 디자인 원리
웹 API는 새로운 서비스나 앱을 만들 때 기존에 존재하던 서비스가 제공하는 기능을 활용할 수 있도록 해준다. 굳이 기존 서비스에 대한 자세한 소스 코드를 알지 않더라도 개발자가 만드는 프로젝트에 쉽게 맞아 들어가는 레고와 같은 존재라고 생각할 수 있다. 그렇다면 나의 서비스를 다른 개발자가, 다른 애플리케이션이 쉽게 사용할 수 있는 API는 어떻게 만들어야 할까?
10년이 넘는 경력 기간 동안 다양한 웹 API를 마주하고 디자인했던 아노드 로렛이 지금까지 웹 API 디자이너들의 머릿속에 감으로만 자리잡고 있던 노하우를 간단히 이해할 수 있는 개념으로 정리했다.
[일상 속 사물이 알려주는 웹 API 디자인]은 우리가 당연하게 여기고 깊이 탐구해보지는 않았던 일상 속 사물을 예로 들어 API의 디자인 방법을 소개한다. 버튼들이 뒤죽박죽으로 섞인 리모컨, 정해놓은 시간까지 초 단위로 카운트다운을 하는 알람시계같이 전혀 사용법을 알 수 없는 물건을 우리에게 익숙한 모습으로 되돌리는 과정을 보여주며 이를 웹 API 디자인 과정과 연결한다. API 디자인 자체에 대한 기초적인 이론과 실제로 사용하기 편한 웹 API를 디자인하는 방법, 실제로 웹 API를 운영하게 되었을 때 관리를 하는 방법까지 좋은 API를 제대로 디자인하는데 필요한 모든 개념을 담았다. 모던 웹 서비스를 만드는 이들이라면 반드시 알아야 할 지식을 손에 넣어보자.
【대상 독자층】
- 백엔드 개발자, 웹 기획자 등 웹 서비스를 만드는 IT 종사자
- IT 업계 진출을 목표로 하는 학생
- 사이드 프로젝트로 웹 서비스를 기획하려는 사람
【중요 포인트】
- 지금까지 개발자들이 감으로만 잡고 있던 웹 API에 관한 내용을 개념화시켜 정리했습니다.
- 복잡할 수 있는 개념을 일상 속 사물을 예시로 들어 차분히 자세하게 설명합니다.
- 웹 서비스 기획과 관련한 내용뿐 아니라 소프트웨어 개발에 필요한 개념까지 다룹니다.
【저자】
아노드 로렛
프랑스에서 활동 중인 소프트웨어 아키텍트로 2002년부터 금융업계에서 웹 서비스와 API를 활용한 다중 연결 시스템을 설계해왔다. 로렛은 API 핸디맨이란 블로그와 API 스타일북이라는 웹 사이트를 운영 중이며 전세계에서 열리는 다양한 API 컨퍼런스에 강연자로 참여했다. 인간 중심의 소프트웨어 디자인을 지향하며 많은 사람들에게 최종 사용자뿐만 아니라 운영팀과 개발자까지 모든 이들이 훌륭한 경험을 할 수 있는 시스템을 만들기를 독려하고 있다.
【역자】
황건구
한국 IBM에서 커리어를 시작해 지금은 마켓컬리에서 개발자로 근무 중이다. ERP와 같은 내부 시스템부터 커머스의 쿠폰 서비스까지 다양한 업무 영역에서 개발과 운영을 경험해 왔고, 안 물어봐도 안 궁금해 할지라도 경험을 공유하는 일을 멈추지 않고 있다. 지금은 시스템을 사람으로 비유하며 그들 간의 의사소통이 어떻게 이루어져야 하는지 끊임없이 고민하고 있다.
【목차】
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 소통하고 공유하기
【출판사 리뷰】
이 책은 총 3부, 13장으로 구성되어 있습니다. 이 책은 모든 장을 처음부터 끝까지 순서대로 읽어야 합니다. 각각의 장은 이전 장에서 배운 내용을 확장해 나갑니다. 즉, 1, 2, 3장을 마쳐야 디자인에 관한 주제를 다루는 장으로 이동할 수 있습니다.
1부. API 디자인 기초
API를 디자인할 때 필요한 기본 개념과 기술들을 다룹니다. 1장은 API가 무엇인지, 디자인이 왜 중요한지 API 디자인을 구성하는 요소가 무엇인지 설명합니다. 2장은 API 사용자의 관점과 API를 사용하는 소프트웨어의 관점에 초점을 맞추어서 API를 노출시키지 않는 소프트웨어를 만들고 API의 실제 목표를 결정하는 방법을 설명합니다. 3장은 HTTP 프로토콜과 REST API, REST 아키텍처 스타일을 소개합니다. 4장은 OpenAPI 명세를 소개하며 목표를 기반으로 API 설명 형태로 API를 구조화하는 방법을 알려줍니다.
2부. 사용하기 좋은 API 디자인
이해하기 쉽고 사용하기 쉬운 API를 설계하는 방법에 중점을 둡니다. 5장은 사람들이 즉시 이해하고 쉽게 사용할 수 있도록 간단한 데이터 표현, 오류 및 성공 피드백, API 호출 흐름을 디자인하는 방법을 설명합니다. 6장은 컨슈머가 일관성 있고 적응 가능하며 검색 가능한 API를 만들어 작동 방식을 추측하기 쉬운 API 를 설계하는 방법을 설명합니다. 7장은 API의 모든 측면을 이해하고 사용하기 쉽게 구성하고 크기를 조정하는 방법을 보여줍니다.
3부. 상황에 맞는 API 디자인
API 디자이너가 API를 둘러싼 전체 컨텍스트와 API 디자인 프로세스 자체를 둘러싼 전체 컨텍스트를 고려 해야 하는 이유를 알려줍니다. 8장은 API 보안과 안전한 API를 디자인하는 법을 설명합니다. 9장은 사용자 들에게 영향을 끼치지 않고 API를 수정하는 법과 버저닝하는 방법을 알려줍니다. 업그레이드하기 좋은 API 를 만드는 방법도 소개합니다. 10장은 네트워크에 효율적인 웹 API를 디자인하는 방법을 분석합니다. 11장 은 API 설계자가 API를 설계할 때 고려해야 하는 전체 컨텍스트를 살펴봅니다. 여기에는 통신 메커니즘 조 정, 소비자 또는 공급자의 한계에 대한 평가 및 조정, 적절한 API 스타일 선택이 포함됩니다. 12장은 API 설계자가 OpenAPI 사양과 같은 API 설명 형식을 활용하여 다양한 유형의 API 문서를 작성하는 방법을 설명합니다. 13장은 전체 API 라이프 사이클을 살펴보고 API 디자이너가 여러 API에 참여해 다양한 API에 참여할 수 있는 방법을 소개합니다. 특히 API 설계 지침과 API 검토를 자세히 살펴봅니다.
'IT 신간' 카테고리의 다른 글
자연어 처리와 머신러닝을 이용하여 《파이썬으로 챗봇 만들기》 (0) | 2020.11.13 |
---|---|
반복적인 업무 프로세스 자동화를 위한 《RPA의 모든 것》 (0) | 2020.11.13 |
인기 모바일 게임들과 함께하는 《모바일 게임 기획의 모든 것》 (0) | 2020.11.12 |