현재 250 개가 넘는 리소스가있는 REST 인터페이스를 구축 중입니다. 내가 끝낼 때까지 나는 1000 개가 넘을 것으로 예상한다. 이것은 회계, 재고, 판매, 인건비, 엔지니어링 등을 다루는 ERP 애플리케이션이다.
단일 자원의 크기 나 복잡성은 직접적으로 다르지 않다. REST와 관련이 있지만 미디어 유형에 대한 관심이 높습니다. 필자는 클라이언트를 구축 할 때 자신의 미디어 유형을 정의하는 경로를 선택했으며 인터페이스는 공용으로 사용할 수 없습니다. 상황에 가장 적합한 미디어 유형을 선택하는 것은 아마도 REST 인터페이스를 설계하는 가장 어려운 부분 중 하나 일 것입니다.
불행히도 대부분의 사람들은 미디어/유형 결정에 펀트하고 일반 응용 프로그램/json 또는 application/xml을 선택한 다음 브라우저에서 다운로드 한 자바 스크립트를 사용하여 형식을 해석합니다. 당신이 가지고있는 유일한 클라이언트가 브라우저 일 때만 작동하며 다른 사람이 귀하의 인터페이스를 다시 사용하기를 원하지 않습니다. 저에게 그것은 느슨한 결합과 표준화 된 포맷으로 인한 뜻밖의 재사용과 같은 REST의 주요 목표 중 하나를 무력화시키는 것 같습니다.
나는 이것이 무엇을 의미하는지 더 설명하기 위해 application/json 또는 application/xml을 클라이언트 응용 프로그램에 전달하는 경우를 생각해보십시오. 클라이언트 응용 프로그램이 해당 일반 형식에 도달하고 특정 데이터를 가져 오면 클라이언트와 서버 간의 숨겨진 결합이 만들어집니다. 대신에 "application/vnd.mycompany.myformat + xml"미디어 형식을 사용하면 클라이언트와의 계약을 명시 적으로 정의합니다. 이것은 형식을 변경하고 "application/vnd.mycompany.myformatV2 + xml"을 생성 할 때 큰 이점이 있습니다.
사람들은 REST가 느슨하게 지정된 인터페이스로 인식하지만 실제로는 그렇지 않습니다. . REST 인터페이스는 리턴하고 수신 할 것으로 예상되는 정확한 미디어 유형에서 매우 명시 적이어야합니다. 미디어 유형은 계약입니다. application/xml을 받고 클라이언트 코드를 사용하여/Customer/Name을 꺼내면 계약이 파기됩니다.
다운로드 된 javascript를 사용하는 웹 응용 프로그램은 계약서 세부 정보가 클라이언트로 컴파일되지 않기 때문에 "application/xml"을 사용할 수 있습니다. 그러나 클라이언트의 행동은 javascript가 미리 프로그래밍되어있는 것을 수행하는 데 극도로 제한됩니다. 안타깝게도 대부분의 공용 RESTful 인터페이스는이 제약 조건을 무시하고 사람들은 지정되지 않은 계약에 밀접하게 연결된 클라이언트를 작성합니다. 그래서 트위터가 형식을 바꿀 때 많은 고객이 깨집니다.
이것은 매우 상호 작용하는 것으로 들리며, 정확히 내가 찾고 있었던 종류입니다. 그러나 나는 당신이 "대부분의 사람들이 미디어/타입 결정에 펀 트툰 것"이라는 말에 대해 명확하지 않습니다. 어떻게 미디어 유형을 정의하는 것이 도움이 될까요? –
이 답변을 두 번 이상 upvote하고 싶습니다! – migu