1."일관성"을확보하라?API설계혼돈에서벗어나는핵심
API설계에서가장큰문제는일관성의부재다.같은팀,같은회사에서만든API조차서로다른명명규칙,다른에러처리방식,다른데이터구조를사용하며개발자들을혼란에빠뜨린다.『웹개발자를위한API디자인패턴』은이름붙이기부터리소스계층구조,데이터타입과기본값까지API설계의모든요소에일관된원칙을제시한다.RESTfulAPI든RPC든,소규모서비스든대규모플랫폼이든반드시일관성있는설계패턴을따라야만한다.이책은임시방편적인API설계를넘어서실제확장가능한'API설계'전쟁이어떻게가능한지안내해줄것이다.
2.실전에강해져라?패턴을"실제코드"로바꾸는방법
이책은단순한설계원칙을넘어,API개발과정에서마주하는모든실무적문제를구체적인패턴으로해결하는방법과노하우를제공한다.또한TypeScript중심의명확한코드예제,체계적인검증절차,리소스관계와보안구현에대한단계별접근법으로실질적인문제해결실력까지갖추게해준다.API를제대로설계하고싶다면,단순히기능만구현하는차원을넘어확장가능하고유지보수가능한구조를만드는방법을이책에서배울수있다.게다가구글의실제사례와폭넓은패턴예제를추가해,책을읽는누구나'내프로젝트에바로적용할수있다'는자신감을안겨줄것이다.
3.설계가전략이되는전쟁?임시방편을넘어'확장가능한아키텍처'에집중하라
이책은'API설계를전략으로,그리고실질적인비즈니스가치로연결해주는것'에진심을다한다.또한설계결과를실제서비스확장·팀협업·장기유지보수정책에녹여낼수있는실전적접근법을제시한다.이책은단순기능구현을뛰어넘어,전략적으로리소스모델링,버전관리,보안정책까지실제로적용하는방법을알려주며,이에더해장기실행작업과배치처리,그리고복잡한데이터관계를현명하게다루는노하우까지제공한다.API가곧비즈니스성공의핵심인프라임을아는이들에게강력추천하고싶은실전형무기다.
API설계라는피할수없는난제를체계적인패턴과실전전략으로돌파하고싶은개발자라면,지금이책을선택하길바란다.
웹API,특히대중에공개할API를만들고있거나만들예정인모든독자를대상으로하는책이다.직렬화포맷(예:JSON,구글프로토콜버퍼,ApacheThrift)이나일반적인스토리지패러다임(예:관계형데이터베이스스키마)에익숙하다면도움이되겠지만,필수적인것은아니다.또한HTTP및관련한여러메서드(예:GET,POST)는이책전반에걸쳐예제내의전송방식으로자주등장하기때문에알고있는것이이해에더유리하다.API를디자인하면서문제를마주하고“어딘가이문제를해결하는방법이있을텐데”라고생각해본적이있다면이책은당신을위한것이다.
◈이책의구성◈
이책은6개의부로구성돼있다.처음2개의부는API디자인에관한좀더일반적인주제를,나머지4개의부는각디자인패턴에대한세부를다룬다.
1부,서론에서는책의나머지부분에관한개괄과,웹API와나중에웹API에적용할디자인패턴의정의및평가프레임워크를살펴본다.
●1장,API소개에서는API가무엇을뜻하는지와왜API가중요한지를다룬다.아울러API가얼마나좋은지를평가할수있는프레임워크를제시한다.
●2장,API디자인패턴소개에서는1장에서더나아가,API에디자인패턴을적용하는방법과왜디자인패턴이유용한지를다룬다.이를위해API디자인패턴의내부구조를분석하고,디자인패턴을사용해API를개선하는간단한예를보여준다.
2부,디자인원칙에서는1부의내용을기반으로해서API를제작할때고려해야할몇가지일반적인디자인원칙을다룬다.
●3장,이름붙이기에서는API에서이름을붙여야하는여러가지구성요소를살펴보고,이름을선택할때무엇을고려해야할지다룬다.아울러이름붙이기가단순히피상적인차원을떠나높은중요성을갖는이유를설명한다.
●4장,리소스범위와계층에서는여러리소스가서로관계를갖는,좀더규모가큰API를다룬다.리소스와그관계를어떻게결정해야할지에관한몇가지질문을던진후이과정에서피해야할점들을예를통해살펴본다.
●5장,데이터타입과기본값에서는API내의다양한데이터타입과그기본값을사용하는방법을다룬다.가장흔히쓰이는문자열이나숫자값뿐만아니라,맵이나리스트등의복잡한타입도함께살펴본다.
3부,기초패턴부터는본격적으로디자인패턴을살펴본다.우선대부분의API에적용해야하는기초패턴부터시작한다.
●6장,리소스식별에서는API사용자가리소스를식별하는방법을알아본다.묘석화(tombstoning),문자열세트,인코딩등로우레벨세부사항까지모두살펴보며,체크섬을통해ID가누락된것인지유효하지않은지구분하는방법도다룬다.
●7장,표준메서드에서는웹API의여러표준메서드(get,list,create,update,delete)가작동하는방법을알아본다.또한각표준메서드가모든리소스에대해동일한방식으로작동해야하며,각리소스마다그특성에따라차이를보이면안되는이유를설명한다.
●8장,부분업데이트와부분취득에서는표준메서드중2가지(get,update)를확장해서사용자가리소스중일부에대해서만상호작용하는방법을알아본다.
아울러이방법이(사용자와API양측에)왜필요하고유용한지,그리고기존시스템에대한개입을최소화하면서이기능을구현하려면어떻게해야하는지알아본다.
●9장,사용자메서드에서는기존표준메서드대신API내에서원하는기능을사용자메서드로구현하는방법을알아본다.특히사용자메서드가가능한(혹은가능하지않은)상황이언제인지와,API내에서가능여부를어떻게결정해야하는지살펴본다.
●10장,장기실행작업에서는API메서드가즉각적으로동작하면안되는특수한상황과,이상황을편리하게다룰수있는장기실행작업(LRO,Long-RunningOperation)을알아본다.LRO가어떻게작동하는지,LRO가지원하는메서드(일시정지,재개,취소)가어떻게이뤄지는지도살펴본다.
●11장,재수행가능작업에서는어떤작업을반복해서실행하는,마치웹API상에서cron작업을수행하는개념을다룬다.익스큐션(Execution)리소스를사용하는방법과,이를스케줄에따라또는원하는시점에실행하는방법을알아본다.
4부,리소스관계에서는리소스와리소스간의관계에집중한다.4장의내용을좀더상세히설명하는셈이다.
●12장,싱글톤서브리소스에서는작은크기의,관계를이루면서격리된데이터를싱글톤서브리소스로분리하는방법을설명한다.특히이방식을적용하는것이적절하거나적절하지않은경우가언제인지살펴본다.
●13장,교차참조에서는웹API에서리소스가다른리소스의참조를참조포인터나인라인값으로저장하는방법을개괄한다.아울러캐스케이드삭제나시간에따라변경된데이터를업데이트하는등의특수한상황에대응하는방법도살펴본다.
●14장,연관리소스에서는리소스간의일대일관계를확장해서연관리소스를통해다대다관계를나타내는방법을설명한다.또한이들관계를메타데이터로어떻게저장할수있을지다룬다.
●15장,add및remove사용자메서드에서는다대다관계를다룸에있어연관리소스대신add및remove등의메서드로간편하게수행하는방법을다룬다.아울러이들메서드의트레이드오프와,왜이방식이항상잘들어맞는것은아닌지살펴본다.
●16장,다형성에서는다형성,즉변수가다양한타입에대응할수있게하는개념을살펴본다.API리소스내의다형성필드를다루는방법과,다형성메서드사용을피해야하는이유를설명한다.
5부,선택적작업에서는단일API리소스의상호작용을넘어서전체리소스컬렉션에서의상호작용에대한디자인패턴을살펴본다.
●17장,복사와이동에서는API내에서리소스를복사하거나이동하는방법을설명한다.외부데이터를다루거나,서로다른부모리소스에서메타데이터를상속하거나,자식리소스를다루는방법등다소복잡한문제를해결한다.
●18장,배치작업에서는표준메서드(get,create,update,delete)를단일리소스가아닌컬렉션에동시에작업하는방법을알아본다.또한그작업결과를반환받는방법이나부분적실패를다루는방법등까다로운문제도살펴본다.
●19장,기준기반삭제에서는18장의배치delete메서드를확장해서특정리소스가아닌필터조건에맞는모든리소스를제거하는방법을다룬다.또한일관성문제를해결하는방법과,의도치않은데이터파괴를피하는규범을살펴본다.
●20장,익명기록에서는직접적으로지시할수없는비리소스데이터를입력하는방법을자세히들여다본다.익명으로데이터를작성하는방식과,이러한익명데이터입력의일관성과API에적합한지를판단하는트레이드오프를살펴본다.
●21장,페이징에서는페이징을통해큰규모의데이터세트를,불투명토큰을사용해오고가는식으로브라우징하는방법을설명한다.아울러커다란단일리소스내에서도페이징을구현하는방법을살펴본다.
●22장,필터링에서는필터기준을적용해리소스목록을나타내는방법과,API에서필터를가장잘표현하는방법을다룬다.이내용은19장에서다룬주제와직접적으로연관된다.
●23장,가져오기와내보내기에서는리소스를API안팎으로가져오고내보내는방법을다룬다.아울러이들동작이백업및복원과어떤맥락의차이를보이는지도살펴본다.
6부,안전과보안에서는다소지루할수도있는주제인,API의안전성과보안에관해살펴본다.API를공격자로부터안전할수있게하는방법과더불어,사용자자신의실수로부터보호하는API메서드를제시한다.
●24장,버전작성과호환성에서는버전작성과다른버전간의호환성이갖는의미를다룬다.호환성을일종의스펙트럼개념으로접근해서API전체에걸쳐일관적으로호환성정책을정의하는것의중요성을알아본다.
●25장,논리삭제에서는사용자자신의실수를보호할수있는패턴(논리삭제)을제시한다.즉,리소스를보이지않게제거하되,완전히시스템에서는삭제되지않게한다.
●26장,요청중복방지에서는요청식별자를사용해시스템에서의중복동작방지를시도한다.이과정에서요청ID를사용하는것의어려움과,큰스케일의시스템에서ID가제대로다뤄지는지확인하는알고리듬을살펴본다.
●27장,요청검증에서는요청을검증해사용자가실제작업을실행하지않고도동작결과를미리보기할수있는방법을다룬다.아울러실제요청과검증요청각각의부수효과등좀더복잡한문제를살펴본다.
●28장,리소스리비전에서는시간에따른변화를추적하는리소스리비전을소개한다.이전리비전을복원하는등의기본적인작업과,계층내의자식리소스에리비전을적용하는등의고급주제를살펴본다.
●29장,요청재시도에서는사용자에게API요청재시도가필요함을알리는패턴을소개한다.아울러여러종류의HTTP응답코드및각각이재시도에안전한지의여부를제시한다.
●30장,요청인증에서는각요청의인증과API가사용자를인증할때고려해야할여러보안기준을살펴본다.API요청을디지털서명함으로써근원과무결성을입증가능하게하며,이후부인될가능성을방지하는방식을소개한다.
◈지은이의말◈
학교에서배우는컴퓨터과학은마치물리법칙을배우는것과같은방식으로이뤄진다.빅O표기법을사용해런타임과공간복잡성을분석하고,여러정렬알고리듬이어떻게작동하는지배우고,바이너리트리를순회하는다양한방법을익힌다.
나는앞으로도이런식으로과학적이고수학적으로일하게될것이라여겼다.그러나전혀그렇지않은현실을마주하고엄청나게놀랐다.
내업무는수학