구어체로 설명하는 다이어리

웹 API 설계: 놓치기 쉬운 핵심 - 데이터 지향 설계 패러다임 본문

읽을거리/Web API Design

웹 API 설계: 놓치기 쉬운 핵심 - 데이터 지향 설계 패러다임

씨씨상 2024. 10. 22. 19:15

 

 

데이터 지향 설계 패러다임

 


REST API는 엔티티를 조작하는 함수 집합보다는, 노출하려는 문제 도메인의 기본 엔티티에 중점을 둡니다. 머리말에서 소개한 예를 따르면, 우리 문제 도메인은 개와 그 주인을 추적하는 것이라고 가정해봅시다. 여기서 우리가 노출할 주요 엔티티는 다음을 포함할 수 있습니다:

• 알려진 개들의 컬렉션. 이 컬렉션의 URL은 https://dogtracker.com/dogs 일 수 있습니다.

• 개별 개들. 각 개는 고유한 URL을 갖습니다. 각 개의 URL 형식은 곧 논의할 것입니다. 우리는 주인에 대해서도 이와 유사한 무언가가 필요합니다.

데이터 지향 접근 방식이 왜 유용할까요?

개별 개의 URL과 HTTP 프로토콜의 작동 방식을 알고 있다면, 이미 여러 가지 작업을 어떻게 수행할지 알 수 있습니다. 예를 들어, GET 메소드를 사용해 그 개의 세부 정보를 가져오고, DELETE 메소드를 사용해 개를 삭제하며, PATCH 또는 PUT 메소드를 사용해 개의 속성을 수정할 수 있음을 알고 있습니다. 이 작업들을 성공적으로 사용하려면 개의 속성을 이해해야 하지만, 그 작업들의 기본적인 메커니즘은 이미 알고 있는 것입니다. 개에게 주인이나 의료 기록 같은 관련된 엔티티가 있다면, 이 엔티티들 역시 비슷한 방식으로 조작할 수 있습니다.

마찬가지로, 개들의 컬렉션 URL을 알면, POST 메소드를 사용해 새로운 개를 생성하거나 GET 메소드를 사용해 기존 개들을 찾을 수 있습니다. 검색 범위를 좁히기 위해 컬렉션을 필터링하는 방법을 배워야 할 수도 있지만, 잘 설계된 API에서는 URL에 쿼리 파라미터를 추가하여 필터링을 수행하는 것이 일반적입니다.

 

반면, 함수 지향 API에서는 변동성이 더 크고, 배워야 할 세부 사항이 훨씬 더 많습니다. 다음 예시 표를 참고해보세요:

 

... ...
/getAllDogs /getAllLeashedDogs
/verifyLocation /verifyVeterinarianLocation
/feedNeeded /feedNeededFood
/createRecurringWakeup /createRecurringMedication
/giveDirectOrder /doDirectOwnerDiscipline
/checkHealth /doExpressCheckupWithVeterinarian
/getRecurringWakeUpSchedule /getRecurringFeedingSchedule
/getLocation /getHungerLevel
/getDog /getSquirrelsChasingPuppies
/newDog /newDogForOwner
/getNewDogsSince /getNewDogsAtKennelSince
/getRedDogs /getRedDogsWithoutSiblings
/getSittingDogs /getSittingDogsAtPark
/setDogStateTo /setLeashedDogsStateTo
/replaceSittingDogsWithRunningDogs  
/saveDog /saveMommaDogsPuppies
... ...

 

이러한 함수들로 구성된 API를 사용하려면, 개가 무엇인지와 그 고유한 속성에 대해 이해해야 할 뿐만 아니라, 해당 API의 함수에 특화된 많은 세부 사항도 배워야 합니다. 이 세부 사항은 학습을 돕기 위한 명확한 구조나 패턴이 없기 때문에, 학습 부담이 크며, 이 지식을 습득한다고 해도 다음에 배워야 할 API에는 큰 도움이 되지 않습니다. 이러한 스타일의 API들 간에는 공통적인 요소가 거의 없거나 아예 없습니다.

HTTP와 REST를 기반으로 API를 설계할 때의 가치는 API에 일관성을 부여하는 데 있습니다. 본질적으로 HTTP를 네이티브로 사용할 때는 별도의 API를 발명할 필요가 없습니다. HTTP 자체가 API를 제공하며, 우리는 자원의 데이터를 정의하기만 하면 됩니다. REST에서는 이를 일관된 인터페이스 제약이라고 부릅니다. 월드 와이드 웹에서는 이 개념이 단순히 API를 배우기 쉽게 만드는 것을 넘어서, 웹 브라우저나 검색 봇과 같은 범용 소프트웨어를 모든 웹사이트에서 작동 가능하게 하는 중요한 요소입니다.

 

API 설계 요소

다음의 API 설계 측면들은 모두 중요하며, 이들이 함께 API를 정의합니다:

• 자원의 표현 방식 — 자원의 표현이 구조화된 데이터(바이트나 문자 스트림이 아닌 경우)라면, 자원의 필드 정의와 관련된 자원으로의 링크를 포함합니다.

• 표준 HTTP 헤더(때로는 사용자 정의 헤더 포함)의 사용.

• 자원의 데이터를 기반으로 자원을 찾기 위한 API의 쿼리 인터페이스를 정의하는 URL과 URI 템플릿.

• 클라이언트가 따라야 할 필수 동작 — 예를 들어, DNS 캐싱 동작, 재시도 동작, 자원에 이전에 없었던 필드를 허용하는 관용성 등.

 

 

 

 

 

[출처]

APIGEE-WEB-API-DESIGN-THE-MISSING-LINK