여기에 좋은 답변이 있지만 동료들이 당신을 설득하는 데 도움이 될지 확실하지 않습니다. 많은 사람들이 지적했듯이, 제안하는 것은 RESTful 디자인에서 벗어나지 않는 것이지, 이것이 제안에 부응하는 것이 중요하다고 생각합니다.
REST는 API가 데이터 저장 및 검색 만 허용하도록하는 것이 아닙니다 . 오히려, 그것은 행동 모델링과 관련되어 같은 자원을. API 는 조치를 취할 수 있어야합니다 (결국 애플리케이션 프로그래밍 인터페이스 임). 문제는 이러한 조치를 모델링하는 방법 입니다.
용어를 사용하는 대신 예제가 동료에게이를 설명하는 가장 좋은 방법 일 것입니다 . 이렇게하면 현재 수행중인 작업, 이로 인해 발생하는 문제, 문제를 해결하는 솔루션 및 여전히 RESTful 상태를 유지할 수 있습니다.
고객 객체를 봅시다.
문제:
UI는 고객을 POST하지만 후속 테이블은 아직 업데이트되지 않았습니다. UI 코드 오류 (또는 브라우저 플러그인 오작동 등)로 인해 후속 호출 중 하나가 실패하면 어떻게됩니까? 이제 데이터가 일관성이없는 상태입니다. API 또는 UI의 다른 부분을 손상시키는 상태 일 수도 있으며 단순히 유효하지 않은 것은 말할 것도 없습니다. 어떻게 회복합니까? 이것이 가능한지 확인하기 위해 가능한 모든 상태를 테스트해야하지만 가능한 것이 무엇인지 아는 것은 어려울 것입니다.
해결책:
API 엔드 포인트를 작성하여 고객을 작성하십시오. create는 동사이며 REST를 위반하기 때문에 "/ customer / create"또는 "/ create-customer"엔드 포인트를 원하지 않는다는 것을 알고 있습니다. 그래서 그것을 명사. "/ 고객 생성"이 작동 할 수 있습니다. 이제 CustomerCreation 객체를 POST하면 고객이 완전히 생성되는 데 필요한 모든 필드가 전송됩니다. 엔드 포인트는 데이터가 완전하고 유효한지 (유효성 검사에 실패한 경우 400 또는 그 이상을 반환 함) 확인하고 단일 db 트랜잭션 내에서 모두 지속될 수 있습니다.
GET / customer 객체에 대한 엔드 포인트도 필요하다면 괜찮습니다. 둘 다 가질 수 있습니다. 비결은 소비자의 요구를 충족시키는 엔드 포인트를 만드는 것입니다.
장점 :
- 당신은 당신이 나쁜 상태로 끝나지 않을 것을 보장합니다
- 요청 순서, 유효성 검사 문제 등을 "알지"않아도되는 경우 UI 개발자가 실제로 더 쉽습니다.
- API에 익숙하지 않으므로 네트워크 요청의 대기 시간을 줄입니다.
- 시나리오를 테스트하고 개념화하기가 더 쉽습니다 (UI에서 누락되거나 잘못된 데이터 조각이 요청에 분산되지 않고 일부는 실패 할 수 있음)
- 비즈니스 로직을보다 잘 캡슐화 할 수 있습니다.
- UI의 비즈니스 및 오케스트레이션 논리를 사용자가 수정할 수 있기 때문에 일반적으로 보안이 더 쉬워집니다.
- 논리 중복을 줄일 가능성이 높습니다 (동일한 데이터에 액세스하는 2+ API보다 API 소비자가 2 명 이상일 가능성이 높습니다)
- 여전히 100 % RESTful
단점 :
- 백엔드 개발자에게는 잠재적으로 더 많은 작업이지만 장기적으로는 아닐 수도 있습니다.
사람들이이 패러다임을 이해하기 어려울 수 있으며 시도하지 않은 경우 그 패러다임에 대해 좋은 점이 있습니다. 자신의 코드에서 예제를 사용하여 그들이 볼 수 있기를 바랍니다.
내 경험은 팀의 개발자가이 전략을 구현하기 시작하자마자 거의 즉시 이점을 보았다는 것입니다.
추가 연구 :
ThoughtWorks의에서이 문서는 정말 날 실용적인 예제를 사용하여 개체 등의 작업을 모델링의 아이디어를 얻을 도움 : https://www.thoughtworks.com/insights/blog/rest-api-design-resource-modeling
또한 CQRS와 Event Sourcing 을 읽고 이러한 종류의 문제에 정확하게 관심 을 기울이면서 (즉, 실제 지속성 논리와 API를 구분하는 것) 읽어보십시오. 동료가 어떻게 이런 종류의 내용을 읽을 수 있을지 모르겠지만 더 명확하게 설명해 줄 수 있습니다.