개발자 도구 · 구문 변환기
레거시 XML 응답은 JSON로: 검사에는 적합하지만 코드에는 위험함
· 그것이 중요한 이유
xml JSON 개발자 워크플로
XML 응답을 JSON로 변환하는 것은 이를 이해하는 가장 빠른 방법이지만, 변환된 형태에 파서를 구축하는 것은 일대다 버그가 전달되는 방식입니다. 이 게시물에서는 검사와 구현 사이의 경계를 그립니다.
하나의 결과로 작동했지만 두 개의 결과로 중단되었습니다. 두 번째 요소가 나타날 때까지 깔끔한 JSON 개체처럼 보였던 XML 피드입니다.
하나의 결과가 있는 XML 샘플은 하위 항목을 개체 또는 문자열에 매핑합니다. 두 번째 형제는 동일한 속성을 배열로 바꿉니다. 따라서 첫 번째 변환된 샘플에 대해 작성된 코드는 카디널리티가 변경되면 실패할 수 있습니다. JSON은 스키마 인식 계약이 아니라 관찰된 발생을 예측한 것입니다.
ToolAcre는 매핑을 예측 가능하게 만들지 만 이러한 일대다 모호성을 제거할 수는 없습니다. 장기간 통합하려면 XSD 또는 문서화된 계약에서 알려진 수집 경로를 정규화하고 프로덕션에서 실제로 사용되는 XML 리더에 대해 두 카디널리티를 모두 테스트하세요.
변환이 읽기에 탁월한 이유 - 친숙한 중괄호로 중첩된 중첩, 키로 표시되는 속성, 한 번에 검색 가능한 전체 응답
변환은 중첩된 요소가 친숙한 객체가 되고, 반복되는 형제 요소가 배열이 되고, 속성이 `@` 키로 나타나기 때문에 읽기에 탁월합니다. 큰 봉투는 닫는 태그를 정신적으로 일치시키지 않고도 빠르게 스캔할 수 있습니다. 유형 추론은 꺼진 상태로 유지되므로 텍스트가 숫자나 부울로 자동으로 추측되지 않습니다.
읽기 가능한 보기는 작성자의 마크업을 보존하는 것보다 오류 코드나 페이로드를 찾는 것이 더 중요한 사고 분류 중에 특히 유용합니다. 프로젝션이 애플리케이션 코드에 필요한 모든 구별을 유지하지 못할 수 있으므로 소스를 JSON 옆에 유지하세요.
변환된 모양이 불안정한 이유 - 반복되는 경우에만 배열이 되는 반복 요소, 속성 접두사 및 나타나거나 사라지는 텍스트 노드
변환된 모양은 발생 횟수, 예약된 접두사 및 요소에 속성 또는 하위 항목이 있는지 여부에 따라 달라집니다. 일반 텍스트는 문자열로 축소될 수 있습니다. 구조가 추가되면 동일한 텍스트가 `#text` 아래로 이동합니다. CDATA는 `#cdata` 아래에 나타나고 속성은 `@`를 사용합니다.
이러한 전환은 불안정한 구현 사고가 아니라 문서화된 규칙입니다. 코드에서 하나의 샘플이 향후 모든 XML 모양을 정의한다고 가정하는 경우에만 위험해집니다. 스키마 인식 모델은 반복성과 선택성을 명시할 수 있습니다. 일반 파서는 할 수 없습니다.
코드에 필요할 수 있는 손실 항목 — 네임스페이스, 요소 순서, 혼합 콘텐츠, CDATA 경계 및 주석
네임스페이스 접두사는 속성 이름에 유지되고 선언은 `@xmlns:*`로 유지됩니다. 확장된 이름으로 확인되지 않습니다. CDATA는 특수 키 아래에 표시되어 있습니다. 주석, 선언 및 처리 지침이 삭제됩니다. 하위 요소 주변의 혼합 텍스트가 결합되어 상대적 위치를 잃습니다.
이름이 다른 속성 간의 요소 순서는 객체에 프로젝션한 후 XML 노드 시퀀스를 안전하게 대체하지 않습니다. 문서 순서, 혼합된 문장 또는 정확한 CDATA 경계가 중요한 경우 이 JSON 모양의 보기 대신 XML 트리 또는 이벤트 파서를 사용하세요.
네임스페이스 접두사 및 CDATA 값은 계속 표시되지만 순서 및 노드 경계는 손실될 수 있습니다.
네임스페이스 접두사, 하나의 본문 하위 요소 및 두 개의 결과 요소가 있는 봉투 모양의 문서를 사용합니다. 변환은 본문 경로를 표시하고 리터럴 접두사를 유지하며 결과 배열을 생성합니다. 이 예에서는 WSDL, SOAP 오류 또는 네임스페이스 확인 지원을 요청하지 않고 탐색하는 방법을 보여줍니다.
그런 다음 하나의 결과를 반복하고 배열이 사라지는 것을 관찰합니다. 해당 쌍은 회귀 고정 애플리케이션 코드에 필요한 것입니다. ToolAcre는 차이점을 드러낼 수 있습니다. 도메인이 항상 값을 배열로 래핑해야 하는지 여부를 결정할 수는 없습니다.
작업된 예: SOAP 스키마 지원을 요구하지 않는 봉투 모양의 XML 문서
변환에 따라 매핑이 문서화되고 카디널리티가 정규화되고 고정 장치가 속성, 빈 값, 혼합 콘텐츠 및 네임스페이스를 포함할 때 데이터 중심 XML에 대해 합리적일 수 있습니다. 매핑 자체를 애플리케이션이 소유한 인터페이스로 취급하세요.
유형 추론을 명시적으로 유지합니다. 끄면 값은 문자열입니다. 이를 사용하면 파서 휴리스틱이 숫자와 부울을 선택합니다. 안정적인 매핑은 환경 간에 실수로 해당 옵션을 전환해서는 안 됩니다.
여기서 다루지 않는 내용 — 장기 통합을 위한 강력한 경로인 유형화된 클라이언트 생성을 위한 WSDL 및 XSD 도구
WSDL 또는 XSD 도구가 포함되어 있지 않습니다. 변환기는 올바른 형식의 XML을 검증하고 모든 DOCTYPE 및 프로젝트 노드를 거부합니다. 형식화된 클라이언트를 생성하거나 시퀀스의 유효성을 검사하거나 도메인 패싯을 적용하지 않습니다. 이러한 작업에는 스키마 인식 소프트웨어가 필요합니다.
DOCTYPE 거부는 일부 레거시 문서의 선언이 무해하더라도 구문 분석되지 않음을 의미합니다. 이는 엔터티 확장을 방지하는 보안 경계이지 기본 서비스 응답의 형식이 잘못되었다는 증거는 아닙니다.
요약: 이해를 위한 변환, 구현을 위한 구문 분석 - 구문 변환기 패널이 몇 초 만에 읽을 수 있는 보기를 제공하는 방법
이해로 전환; 구현할 소유 계약에 대해 구문 분석합니다. JSON 뷰는 몇 초 만에 페이로드를 표시할 수 있지만 원본 XML은 순서, 카디널리티 및 네임스페이스에 대한 증거로 남아 있습니다.
구문 변환기는 투영 및 경고에 대해 정직합니다. 하나의 깔끔한 샘플이 다음 반복 요소에서 중단되는 통합을 정의하도록 하는 대신 이러한 가시성을 사용하여 엣지 케이스 테스트를 설계하십시오.
내구성 고정 장치 세트에는 반복 가능한 요소에 대한 발생이 0개, 1개 및 여러 개 포함되어야 합니다. 이름을 공유하는 속성과 하위; 자동 폐쇄 요소; 혼합 텍스트; CDATA; 및 리터럴 네임스페이스 접두사. 실제로 배포한 매핑을 통해 해당 고정 장치를 실행하고 ToolAcre의 형식화된 JSON 텍스트가 아닌 정규화된 도메인 개체를 어설션합니다. 이 접근 방식은 변환기를 사용하여 명시적인 파서 계약에 연결된 생산 동작을 유지하면서 모양을 탐색합니다.