탄광에서 카나리아.
나는 이런 질문을 1 년 가까이 기다리고있었습니다. 오늘이 올 것이 불가피했고 앞으로 몇 달 안에 더 많은 질문을 보게 될 것입니다.
경고 표시
SOAP 클라이언트보다 RESTful 클라이언트를 빌드하는 데 시간이 오래 걸립니다. SOAP 툴킷은 많은 상용구 코드를 제거하고 거의 노력없이 클라이언트 프록시 객체를 사용할 수있게합니다. Visual Studio와 같은 도구 및 서버 URL을 사용하면 5 분 이내에 로컬로 임의의 복잡한 원격 개체에 액세스 할 수 있습니다.
application / xml 및 application / json을 반환하는 서비스는 클라이언트 개발자에게 성가시다. 우리는 그 데이터를 어떻게 처리해야합니까?
다행히도 REST 서비스를 제공하는 많은 사이트는 많은 클라이언트 라이브러리를 제공하므로 이러한 라이브러리를 사용하여 강력한 형식의 개체에 액세스 할 수 있습니다. 그래도 바보 같은 것 같습니다. 그들이 SOAP를 사용했다면 우리는 그 프록시 클래스를 직접 코드 생성 할 수있을 것이다.
SOAP 오버 헤드, ha. 대기 시간이 줄어 듭니다. 사람들이 실제로 초과 바이트 수를 걱정하고 있다면 HTTP가 올바른 선택이 아닐 수도 있습니다. 사용자 에이전트 헤더가 몇 바이트를 사용하는지 보셨습니까?
예, HTML 및 자바 스크립트 이외의 다른 디버깅 도구로 웹 브라우저를 사용해 보셨습니까? 짜증나게 해줘 동사 중 두 개만 사용할 수 있으며 캐싱은 끊임없이 방해를받으며 오류 처리는 많은 정보를 삼키며 끊임없이 favicon.ico를 찾고 있습니다. 날 쏴
읽을 수있는 URL. 명사 만, 동사는 없어요 예, CRUD 작업 만 수행하는 한 간단하고 한 가지 방식으로 개체 계층 구조에만 액세스하면됩니다. 불행히도 대부분의 응용 프로그램은 그보다 약간 더 많은 기능이 필요합니다.
임박한 재앙
현재 동일한 결론을 내리는 REST 서비스와 통합되는 애플리케이션을 개발중인 개발자의 메트릭 보트로드가 있습니다. 그들은 단순성, 융통성, 확장 성, 진 화성 및 평온한 재사용의 성배를 약속 받았다. 웹 자체의 특성은 어떻게 잘못 될 수 있습니까?
그러나 그들은 버저 닝이 큰 문제라는 것을 알고 있지만 컴파일러는 문제를 감지하는 데 도움이되지 않습니다. 수작업으로 작성된 클라이언트 코드는 데이터 구조가 발전하고 URL이 리팩토링됨에 따라 유지 보수가 어렵다. 명사와 4 개의 동사를 중심으로 API를 디자인하는 것은 특히 어려울 수 있습니다. 특히 쿼리 문자열을 사용할 수 있거나 사용할 수없는시기를 알려주는 RESTful Url zealots가 있습니다.
개발자는 왜 Json 형식과 Xml 형식을 모두 지원하기 위해 노력을 낭비하고 있는지 궁금해 할 것입니다. 왜 노력을 하나에 집중하고 잘 수행하지 않습니까?
상황이 어떻게 잘못 되었나요
내가 뭘 잘못했는지 말해 줄게 우리는 개발자로서 마케팅 부서가 우리의 주요 약점을 활용할 수 있도록합니다. 은 총알에 대한 우리의 영원한 수색은 REST가 실제로 무엇인지에 대한 실명을 보여주었습니다. 표면적으로 REST는 너무 쉽고 간단 해 보입니다. Urls로 리소스 이름을 지정하고 GET, PUT, POST 및 DELETE를 사용하십시오. 우리는 이미 그 방법을 알고 있습니다. SELECT, INSERT, UPDATE 및 DELETE가있는 테이블과 열 및 SQL 문이있는 데이터베이스를 수년간 처리 해 왔습니다. 케이크 한 조각이었을 것입니다.
자체 설명 및 하이퍼 미디어 제한과 같은 일부 사람들이 논의하는 REST의 다른 부분이 있지만 이러한 제한은 자원 식별 및 균일 한 인터페이스만큼 단순하지 않습니다. 원하는 목표가 단순 할 경우 복잡성을 더하는 것 같습니다.
이 워터 다운 버전의 REST는 여러 가지 방법으로 개발자 문화에서 검증되었습니다. 리소스 식별과 균일 한 인터페이스를 장려하는 서버 프레임 워크가 만들어졌지만 다른 제약 조건은 지원하지 않았습니다. 접근 방식을 차별화하는 용어가 사용되기 시작했습니다 (HI-REST vs LO-REST, Corporate REST vs Academic REST, REST vs RESTful).
어떤 사람들은 모든 제약 조건을 적용하지 않으면 REST가 아니라고 소리를 지 릅니다. 혜택을받지 못할 것입니다. 반 REST는 없습니다. 그러나 그 목소리는 그들의 소중한 용어가 모호함에서 도난 당하고 주류가되었다는 화가 난 종교적 열성 자로 분류되었습니다. REST 사운드를보다 어렵게 만드는 질투하는 사람들.
REST라는 용어는 분명히 주류가되었습니다. API가있는 거의 모든 주요 웹 속성은 "REST"를 지원합니다. 트위터와 넷플릭스는 매우 유명한 두 가지입니다. 가장 무서운 점은 내가 설명하는 공개 API 하나만 생각할 수 있으며 실제로 하이퍼 미디어 제약 조건을 구현하는 소수가 있다는 것입니다. StackOverflow 및 Gowalla와 같은 일부 사이트는 응답에서 링크를 지원하지만 링크에는 큰 차이가 있습니다. StackOverflow API에는 루트 페이지가 없습니다. 웹 사이트에 대한 홈 페이지가 없다면 웹 사이트가 얼마나 성공적 이었을지 상상해보십시오!
당신은 내가 두려워 두려워
지금까지 작성한 경우 귀하의 질문에 대한 짧은 대답은 API (Netflix 및 Twitter)가 모든 제약 조건을 준수하지 않으므로 REST API가 가져 오는 이점을 얻지 못할 것입니다.
REST 클라이언트는 SOAP 클라이언트보다 빌드하는 데 시간이 오래 걸리지 만 하나의 특정 서비스와 연결되어 있지 않으므로 여러 서비스에서 재사용 할 수 있어야합니다. 웹 브라우저의 고전적인 예를 들어보십시오. 웹 브라우저는 몇 개의 서비스에 액세스 할 수 있습니까? 피드 리더는 어떻습니까? 이제 평균 트위터 클라이언트가 몇 개의 다른 서비스에 액세스 할 수 있습니까? 예, 하나 만요
REST 클라이언트는 단일 서비스와 인터페이스하도록 구축되어서는 안되며 모든 서비스에서 제공 할 수있는 특정 미디어 유형을 처리하도록 구축되어야합니다. 명백한 질문은 application / json 또는 application / xml을 제공하는 서비스를 위해 REST 클라이언트를 어떻게 구축 할 수 있는가입니다. 당신은 할 수 없습니다. 이는 해당 형식이 REST 클라이언트에 완전히 쓸모 없기 때문입니다. 당신이 직접 말 했어요
실제 스키마 나 참조 문서가 없기 때문에 파이프를 가로 질러 다시 돌아 오는 것에 대해 "추측"을해야합니다.
트위터와 같은 서비스에 대해서는 절대적으로 정확합니다. 그러나 REST의 자체 설명 제약 조건에 따르면 HTTP 컨텐츠 유형 헤더는 유선을 통해 전송되는 컨텐츠를 정확하게 설명해야합니다. application / json 및 application / xml을 제공하면 내용에 대해 아무 것도 알려주지 않습니다.
REST 기반 시스템의 성능을 고려할 때 더 큰 그림을 봐야합니다. 엔벨로프 바이트에 대해 말하는 것은 빠른 정렬을 쉘 정렬과 비교할 때 루프 해제를 말하는 것과 같습니다. SOAP이 더 잘 수행 될 수있는 시나리오가 있고 REST가 더 잘 수행 할 수있는 시나리오가 있습니다. 상황이 전부입니다.
REST는 지원하는 미디어 유형에 대해 매우 유연하고 캐싱에 대한 정교한 지원을 통해 많은 성능 이점을 얻습니다. 캐싱이 제대로 작동하려면 거의 모든 제약 조건을 준수해야합니다.
읽을 수있는 URL에 대한 마지막 요점은 훨씬 역설적입니다. 하이퍼 미디어 제약 조건에 충실하면 모든 URL이 GUID가 될 수 있으며 클라이언트 개발자는 가독성을 잃지 않습니다.
URI가 클라이언트에게 불투명해야한다는 사실은 REST 시스템을 개발할 때 가장 중요한 것 중 하나입니다. 읽을 수있는 URL은 서버 개발자에게 편리하고 체계적인 URL로 서버 프레임 워크가 요청을보다 쉽게 전달할 수 있지만 API를 사용하는 개발자에게는 영향을 미치지 않는 구현 세부 사항입니다.
Twitter API는 RESTful에 가깝지 않기 때문에 SOAP보다 API를 사용하는 데 따른 이점을 볼 수 없습니다. Netflix API는 훨씬 더 가깝지만 일반 미디어 유형을 사용하면 단일 제약 조건을 준수하지 않아도 서비스에서 파생 된 이점에 큰 영향을 줄 수 있음을 알 수 있습니다.
전부 잘못이 아닐 수도 있습니다
나는 서비스 제공 업체에 많은 덤핑을 해왔지만 RESTfully 춤을 추려면 두 가지가 필요합니다. 서비스는 종교적으로 모든 제약을 따를 수 있으며 고객은 여전히 모든 혜택을 쉽게 취소 할 수 있습니다.
클라이언트가 특정 유형의 리소스에 액세스하기 위해 URL을 하드 코딩하면 서버가 해당 URL을 변경하지 못하게됩니다. 서비스가 URL을 구성하는 방법에 대한 암시 적 지식을 기반으로하는 모든 종류의 URL 구성은 위반입니다.
링크에서 어떤 유형의 표현이 반환되는지에 대한 가정을하면 문제가 발생할 수 있습니다. HTTP 헤더에 명시 적으로 명시되지 않은 지식을 기반으로 표현의 내용에 대한 가정을하는 것은 미래에 고통을 야기 할 수있는 결합을 확실히 만들 것입니다.
그들은 SOAP을 사용해야 했습니까?
개인적으로는 그렇게 생각하지 않습니다. REST가 올바르게 수행되면 분산 시스템이 장기적으로 발전 할 수 있습니다. 다른 사람들이 개발 한 구성 요소가 있고 수년간 지속해야하는 분산 시스템을 구축하는 경우 REST는 매우 좋은 옵션입니다.