RAD서버 RAD 서버에 Swagger UI 임베이딩
2020.03.09 13:04
Stephen Ball 블로그 글 중에 REST API 클라이언트 개발에 큰 도움이 될만한 글이라 생각되어 번역해보았습니다.
· 원문 링크 : https://delphiaball.co.uk/2019/12/03/embedding-swagger-ui-into-rad-server/
이 글은 ‘REST 서버와 클라이언트 개발하기’의 첫 번째 편입니다. RAD 서버와 함께 사용되는 Swagger UI를 보여주기 위해 작성된 이전 글에 대한 업데이트이며 RAD 서버의 새로운 기능을 다룹니다.
다음 글에서는 코드를 직접 사용하지 않고 TEMSDataSetResource 컴포넌트를 사용하여 RAD 서버의 마스터-디테일 데이터를 구현하는 방법에 대해서 다루도록 하겠습니다. 세번째 편에서는 델파이로 멀티 플랫폼 클라이언트를 작성해 보기로 하겠습니다.
RAD 서버에 Swagger UI 임베이딩
왜 Swagger UI를 RAD 서버에 포함해야합니까?
Swagger UI는 REST API로 작업하고 문서를 확인하기 위한 훌륭한 옵션입니다. 개발시 항상 해결 해야하는 문제 중 하나는
CORS (Cross Origin Resource Sharing)였습니다. *CORS(Cross-Origin Resource Sharing)은 말 그대로 다른 서버의 리소스를 사용할 수 있는 것을 의미합니다.
현재 이 문제를 햬결하기 위한 몇 가지 옵션이 있습니다. 브라우저 플러그인을 사용하여 이 문제를 해결하거나 (이전글 참조) [Server.APICrossDomain]의 emsserver.ini에서 CORS를 활성화하거나 swagger-ui를 RAD 서버 인스턴스에 포함시킬 수 있습니다.
이 비디오에서는 후자의 옵션을 다룹니다. 문서를 시작하고 실행하는 방법을 볼 수 있습니다. 비디오는 RAD 서버를 통해 외부 리소스를 공유하도록 EMSServer.ini를 구성하고 다운로드 한 파일을 수정하여 RAD 서버에서 직접 API 문서를 자동으로 로드하는 방법을 보여줍니다.
Youtube에서 바로보기: https://youtu.be/RyX3mJnt9xc
RAD 서버의 웹 파일 EMSServer.ini
이 작업의 핵심은 10.3.2에서 RAD Studio에 추가 된 WebFiles 옵션입니다. RAD Studio 아키텍트 버전에서 웹 클라이언트 개발을 위해 웹 컨텐츠를 제공하고 ExtJS를 지원하기 위한 주 목적으로 추가되었지만 다른 컨텐츠를 공유 할 수 있는 또 다른 이점도 있습니다.
경로를 사용하려면 emsserver.ini (기본 경로 C : \ Users \ Public \ Documents \ Embarcadero \ EMS \ emsserver.ini)를 편집해야합니다. 경로를 수정한 다음 [Server.PublicPaths]에 원하는 수의 엔드 포인트를 설정합니다.
엔드 포인트는 임의 이름 값으로 JSON 구조로 설정됩니다. 예
Path3={"path": "swagger-ui", "directory": "Z:\\Source\\git\\swagger-ui\\dist\\", "default": "index.html", "extensions": ["css", "html", "js", "map", "png"], "charset": "utf-8"} |
저의 개인 취향은 Windows VM과 공유되는 Macbook의 공유 폴더를 사용합니다. 단지 웹 파일(emsserver.ini)을 계속 업데이트 할 수 있는 폴더가 있다는 것을 의미합니다.
RAD 서버 문서(Documentation) 속성
Jim McKeith는 제가 이전에 읽어 보시기를 권했던 RAD 서버 API 문서화에 대한 게시물을 작성했습니다. 그 내용 외에도 이 비디오에서는 명명 된 매개 변수를 사용하여 Resource Suffix 정의에 대해서도 알아봅니다.
3 가지 주요 속성이 있습니다. (아래 예제에서는 TEMSDataSetResource를 배치하여 문서화를위한 리소스 사용을 정의합니다).
EndPointRequestSummary EndPointRequestParameter ResourceSuffix
[EndPointRequestSummary('Exams', 'Exams', 'List of Exam', 'application/json', '')]
[EndPointRequestParameter(TAPIDocParameter.TParameterIn.Path, 'EXAM_ID', 'EXAM_ID for identifying a specific exam', false, TAPIDoc.TPrimitiveType.spInteger, TAPIDoc.TPrimitiveFormat.None, TAPIDoc.TPrimitiveType.spInteger, '', '')]
[ResourceSuffix('./')] [ResourceSuffix('List', './')] [ResourceSuffix('Get', './{EXAM_ID}')] [ResourceSuffix('Put', './{EXAM_ID}')] [ResourceSuffix('Delete', './{EXAM_ID}')] dsrEXAM: TEMSDataSetResource; |
ResourceSuffix는 기본 URL 호출을 정의합니다. List, Get, Put, Delete 속성은 해당 호출을 위한 확장을 정의합니다 (마스터-디테일 데이터를 작성할 때 중요합니다. 두 번째 비디오 및 다음 블로그 게시물에서 다룹니다).
ResourceSuffix 리소스 위임(delegation)은 매우 강력하여 마스터-디테일 데이터를 매우 빠르게 구축 할 수 있습니다.