책 소개
요약
페이스북, 트위터 등 유명 SNS 서비스에서 이미 오래 전에 도입되어 일반화된 RESTful 서비스. 이 책은 REST에 관하여 기초 원리부터 실무적인 예제 코드까지 차례로 설명하고, 현장에서 애플리케이션을 설계/개발하는 실무자들에게 큰 도움이 될 만한 베스트 프랙티스를 제시한다. RESTful 서비스에 관심있는 아키텍트, 개발자, 그리고 웹의 기본기를 다지고자 하는 모든 독자에게 추천할 만한 도서다.
이 책에서 다루는 내용
■ JAX-RS 2.0 API를 이용하여 RESTful 웹 서비스를 작성하는 방법
■ RESTful 서비스 관점에서 OAuth와 보안 관련 고급 지식 습득
■ 캐싱 기법, 검증, 사용량 제한, 비동기 처리, 기타 애플리케이션의 응답성 제고를 위한 베스트 프랙티스 학습
■ RESTful 서비스의 페이지네이션, 문서화, 테스팅에 관한 베스트 프랙티스
■ RESTful 서비스를 이용한 애플리케이션 작성 시 알아두어야 할 HATEOAS와 마이크로 아키텍처
■ REST의 미래, 진화하는 표준 명세, 그리고 유명 기업들의 REST 실제 적용 사례 연구
■ 웹훅(WebHook), 웹소켓(WebSocket), SSE 등 실시간 데이터를 클라이언트에게 전달하기 위한 기술 간의 비교 고찰
이 책의 대상 독자
RESTful 서비스를 작성하여 생산성을 향상하기를 바라는 초심 개발자가 기본적인 식견을 쌓기 위해 읽어도 좋고, 복잡하고 어려운 주제를 캐기 좋아하는 숙련된 개발자에게도 큰 도움이 될 것이다.
이 책의 구성
1장. ‘REST: 태생의 기원’에서는 REST의 기본 개념부터 RESTful 서비스를 설계하는 방법과 관련 베스트 프랙티스를 살펴본다. 자바 언어로 RESTful 서비스를 작성하기 위한 JAX-RS 2.0 API에 대해서 다룬다.
2장. ‘리소스 설계’에서는 다양한 요청/응답 패턴과 콘텐츠 협상, 리소스 버저닝, REST 응답 코드 등을 살펴본다.
3장. ‘보안과 추적성’에서는 REST API의 보안과 추적성이라는 쉽지 않은 문제와 관련된 접근 통제, OAuth 인증, 에러 처리, 감사와 검증 패턴 등에 대해 알아본다.
4장. ‘성능을 고려한 설계’에서는 성능과 관련된 설계 원칙을 다룬다. 캐싱 원리와, REST에서 비동기 작업과 실행 시간이 오래 걸리는 작업을 어떻게 처리할 것인지 설명하고, 패치를 이용하여 부분 업데이트를 하는 방법을 살펴본다.
5장. ‘고급 설계 원칙’에서는 사용량 제한, 응답 페이지네이션, 국제화/지역화 같은 고급 주제들을 상세한 예제 코드와 함께 설명한다. 또 확장 가능성, HATEOAS, REST 서비스의 테스팅과 문서화 등에 대해서도 소개한다.
6장. ‘최신 표준과 REST의 미래’에서는 실시간 API인 웹훅(WebHook), 웹소켓(WebSocket), PuSH, SSE에 대해 살펴보고 여러 가지 측면에서 비교/대조해본다. 그리고 웹훅이나 웹소켓 같은 신기술이 애플리케이션에서 실제로 응용되는 사례를 알아보고, 마이크로 서비스(micro service)에서 REST 기술이 어떤 역할을 담당하는지 간략히 설명한다.
부록에서는 깃허브(GitHub), 트위터(Twitter), 페이스북(Facebook) 서비스에 적용된 다양한 유형의 REST API에 대해 알아보고, ‘2장, 리소스 설계’부터 ‘5장, 고급 설계 원칙’에 걸쳐 학습한 내용과 연관되는 부분들을 최종 점검해본다.
목차
목차
- 1장 REST: 태생의 기원
- REST 개요
- REST와 무상태성
- 리차드슨 성숙도 모델
- 레벨 0: 원격 프로시저 호출
- 레벨 1: REST 리소스
- 레벨 2: 추가 HTTP 메소드
- 레벨 3: HATEOAS
- 안전과 멱등성
- 안전한 메소드
- 멱등한 메소드
- RESTful 서비스의 설계 원칙
- 리소스 URI 결정
- 리소스 메소드 결정
- HTTP 메소드와 REST
- PUT과 POST의 차이
- 리소스 표현형 결정
- API 구현
- 자바 RESTful 서비스 API(JAX-RS)
- RESTful 서비스 배포
- RESTful 서비스 테스팅
- JAX-RS 2.0 클라이언트 API
- RESTful 리소스 접근
- API 구현
- 리소스 설계에 관한 베스트 프랙티스
- 참고 자료
- 정리
- REST 개요
- 2장 리소스 설계
- REST 리소스 패턴
- 콘텐츠 협상
- HTTP 헤더를 이용한 콘텐츠 협상
- URL 패턴을 이용한 콘텐츠 협상
- 엔티티 제공자와 여러 가지 표현형
- StreamingOutput
- ChunkedOutput
- 저지와 JSON
- POJO 기반의 JSON 바인딩
- JAXB 기반의 JSON 바인딩
- 저수준의 JSON 파싱과 처리 지원
- API 버저닝
- URI에 버전 지정
- 요청 쿼리 파라미터에 버전 지정
- Accept 헤더에 버전 지정
- 응답 코드와 REST 패턴
- 참고 자료
- 정리
- 3장 보안과 추적성
- REST API 로깅
- REST API 로깅에 관한 베스트 프랙티스
- 여러 서비스에 걸쳐 상세하고 일관된 패턴의 로그를 수집
- 민감한 데이터를 숨김
- 최초 호출자를 로깅
- 기본적으로 페이로드는 로깅 안 함
- 요청 관련 메타정보 로깅
- 로깅 시스템을 모니터링 시스템과 연계
- REST API 로깅에 관한 베스트 프랙티스
- RESTful 서비스 검증
- 검증 예외 처리 및 응답 코드
- RESTful 서비스의 예외 처리
- 인증과 인가
- 인증의 의미
- SAML
- 인가의 의미
- OAuth
- OAuth 1.0과 2.0의 차이
- 권한 승인
- 리프레시 토큰과 액세스 토큰
- 저지와 OAuth 2.0
- OAuth에 관한 REST API 베스트 프랙티스
- 액세스 토큰 수명 제한
- 인가 서버에서 리프레시 토큰을 제공
- SSL과 암호화 적용
- 오픈아이디 접속
- 인증의 의미
- REST 아키텍처 컴포넌트
- 참고 자료
- 정리
- REST API 로깅
- 4장 성능을 고려한 설계
- 캐싱의 원리
- 캐싱 상세
- 캐싱 헤더의 종류
- 강한 캐싱 헤더
- 약한 캐싱 헤더
- Expires와 Cache-Control - max-age
- Cache-Control 헤더와 지시어
- Last-Modified와 ETag
- Cache-Control 헤더와 REST API
- ETags
- ETags 헤더의 작동 원리
- ETags 헤더와 REST API
- ETags의 종류
- 페이스북 REST API와 ETags
- RESTEasy와 캐싱
- REST에서 비동기 작업 및 실행 시간이 긴 작업
- 비동기 요청/응답 프로세스
- 비동기 리소스에 관한 베스트 프랙티스
- 202 Accepted 메시지 전송
- 큐에 대기 중인 객체의 만료 시각 설정
- 메시지 큐를 이용한 비동기 처리
- HTTP 패치와 부분 업데이트
- JSON 패치
- 참고 자료
- 정리
- 캐싱의 원리
- 5장 고급 설계 원칙
- 사용량 제한 패턴
- 프로젝트 레이아웃
- 상세 코드 보기
- 사용량 한도를 초과하지 않기 위한 베스트 프랙티스
- 캐싱
- 반복적인 호출을 피하라
- 요청을 로깅하라
- 폴링을 피하라
- 스트리밍 API 지원
- 응답 페이지네이션
- 페이지네이션 유형
- 오프셋 페이지네이션
- 기간 페이지네이션
- 커서 페이지네이션
- 프로젝트 레이아웃
- 페이지네이션 유형
- 국제화와 지역화
- Miscellaneous topics(미번역)
- HATEOAS
- 페이팔 REST API와 HATEOAS
- REST와 확장성
- REST API 관련 기타 사항
- RESTful 서비스 테스팅
- RESTful 서비스 문서화
- 참고 자료
- 정리
- 사용량 제한 패턴
- 6장 최신 표준과 REST의 미래
- 실시간 API
- 폴링
- 푸시 모델: PubSubHubbub
- 스트리밍 모델
- SSE
- SSE와 자바스크립트
- SSE와 Jersey
- 웹훅
- 웹소켓
- 기타 실시간 지원 API
- XMPP 109
- BOSH over XMPP
- 웹훅, 웹소켓, SSE 비교
- REST와 마이크로 서비스
- 단순성
- 문제들을 분리
- 확장와 축소
- 능력을 명확하게 분리
- 프로그래밍 언어 독립
- 참고 자료
- 정리
- 부록
- _깃허브 REST API 개요
- _페이스북 그래프 API 개요
- _트위터 REST API 개요
- 옮긴이 기고문
- _넷빈즈 설치와 사용법
도서 오류 신고
정오표
정오표
[p.41 : 표]