RAD 스튜디오 10.3 리오는 RAD 서버의 성능향상과 엔드 포인트 연동을 더 쉽고 유연하게 작성할 수 있는 특성등이 추가되었습니다.

 

엔드 포인트 메소드와 Content-Type, Accept 연동 특성 추가

커스텀 리소스에 요청 시 URL과 HTTP 메소드에만 의존하지 않고, HTTP 해더의 Accept 및 Cotnet-Type에 따라 엔드 포인트 메소드를 연결하는 특성이 추가되었습니다. 이제 동일한 URL 및 HTTP 메소드라도 Accept 및 Content-Type에 따라 다른 동작을 구현할 수 있습니다.

  • EndpointProduce : GET 메소드의 엔드 포인트에 추가할 수 있습니다. HTTP 해더의 Accept 항목 값과 일치하는 MIME 타입/파일 확장자를 파라메터로 지정합니다.
  • EndpointConsume : PUT / POST / PATCH 메소드의 엔드 포인트에 추가할 수 있습니다. HTTP 해더의 Content-Type 항목 값과 일치하는 MIME 타입/파일 확장자를 파라메터로 지정합니다.

코드 예제: 

 

type

  [ResourceName('Test')]

  TTestResource = class​​(TDataModule)

  public

    [ResourceSuffix('*')]

    [EndpointProduce('image/jpeg')]

    procedure​​ GetImage(const​​ AContext: TEndpointContext;

      const​​ ARequest: TEndpointRequest;

      const​​ AResponse: TEndpointResponse);

    [ResourceSuffix('*')] [EndpointProduce('application/pdf')]

    procedure​​ GetPdf(const​​ AContext: TEndpointContext;

      const​​ ARequest: TEndpointRequest;

end​​;const​​ AResponse: TEndpointResponse); 

커스텀 메소드와 HTTP 메소드 연결 특성 추가

RAD 서버의 이전 버전에서는 HTTP 메소드(GET, POST 등)의 엔드 포인트 메소드 이름과 매핑되었습니다.

이제 위 방식 외에도 다른이름의 메소드를 엔드 포인트 메소드로 매핑할 수 있는 EndpointMethod 특성이 추가되었습니다.

 

코드 예제:

 

type

  [ResourceName('Test')]

  TTestResource = class(TDataModule)

  public

    [EndpointMethod(TEndpointRequest.TMethod.Get)]

    procedure​​ PrintEmps(const​​ AContext: TEndpointContext;

    const​​ ARequest: TEndpointRequest; 

    const​​ AResponse: TEndpointResponse); 

  end;

요청 처리를 클래스 또는 컴포넌트로 위임

RAD 서버의 사용자 리소스에 발생한 요청을 필드로 지정한 다른 자원 모듈(클래스 / 컴포넌트)로 위임하는 기능이 추가되었습니다.

위임받는 클래스는 IEMSEndpointPublisher 인터페이스를 구현해야 합니다.

 

코드 예제:

type

  TEmpsProvider = class​​(TComponent, IEMSEndpointPublisher)

  private

    class var

      FArray: TJSONArray;

  private

    function​​ GetItemByID(ARequest: TEndpointRequest): Integer;

    class​​ constructor Create;

    class​​ destructor Destroy;

  public
    procedure​​ Get(const​​ AContext: TEndpointContext;

      const​​ ARequest: TEndpointRequest;

      const​​ AResponse: TEndpointResponse); overload​​;

    [ResourceSuffix('./{id}')]

    procedure​​ GetItem(const​​ AContext: TEndpointContext;

      const​​ ARequest: TEndpointRequest;

      const​​ AResponse: TEndpointResponse); overload​​;

    [ResourceSuffix('./{id}')]

    procedure​​ Put(const​​ AContext: TEndpointContext;

      const​​ ARequest: TEndpointRequest;

      const​​ AResponse: TEndpointResponse);

    procedure​​ Post(const​​ AContext: TEndpointContext;

      const​​ ARequest: TEndpointRequest;

      const​​ AResponse: TEndpointResponse);

    [ResourceSuffix('./{id}')]

    procedure​​ Delete(const​​ AContext: TEndpointContext;

      const​​ ARequest: TEndpointRequest; 

      const​​ AResponse: TEndpointResponse);

  end​​;

 

  [ResourceName('Test')]

  TTestResource = class​​(TDataModule)

  public

 

    Emps: TEmpsProvider;

    constructor​​ Create(AOwner: TComponent); override​​;

  end​​

 

위와 같이 구현 시 다음 요청은 Emps 객체인 TEmpsProvider의 메소드에 의해 다음과 같이 처리됩니다.

  • GET http://localhost/test/emps - TEmpsProvider.Get 메소드
  • GET http://localhost/test/emps/1 - TEmpsProvider.GetItem 메소드

JSON 처리를 위한 헬퍼 컴포넌트 추가

컴포넌트에 요청 처리를 위임하는 새로운 기능을 이용해 RAD 스튜디오 10.3 리오에서 JSON 처리를 단순화 하는 새로운 컴포넌트가 추가되었습니다.

  • TEMSFileResource : 경로 및 파일이름 속성에 지정된 파일로 요청 처리
  • TEMDDataSetResource : DataSet 속성에 설정된 데이터셋의 데이터를 JSON으로 처리, 페이징 파라메터 지원

코드 샘플:

 

 

[ResourceName('Notes')]

TNotesResource1 = class​​(TDataModule)

  FDConnection1: TFDConnection; // connects to SQLite DB with "notes" table

  FDQuery1: TFDQuery; // SELECT * FROM Notes

  [ResourceSuffix('list', '/')]

  [ResourceSuffix('get', '/{id}')]

  [ResourceSuffix('put', '/{id}')]

  [ResourceSuffix('post', '/')]

  [ResourceSuffix('delete', '/{id}')]

  EMSDBResource1: TEMSDataSetResource;

end​​;

// database resource
[ResourceSuffix('/')]
EMSDBResource1: TEMSDataSetResource;
[ResourceSuffix('/')]
[EndpointProduce('get', 'image/jpeg, image/png')]
EMSDBResource1: TEMSDataSetResource;
// file resource
[ResourceSuffix('/')]
[EndpointProduce('get', 'application/pdf')]
EMSFileResource1: TEMSFileResource;

 

RAD 서버의 기타 개선사항

  • RAD 서버의 성능이 간단한 작업 시 처리량이 10배 이상 향상되었습니다.

 

 

 

 

 

 

10.3 리오의 업데이트 버전들

 

 

번호 제목 글쓴이 날짜 조회 수
공지 [DelphiCon 요약] 코드사이트 로깅 실전 활용 기법 (Real-world CodeSite Logging Techniques) 관리자 2021.01.19 15559
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 14003
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 16537
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 22124
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 23375
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 18967
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 39365
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 174768
903 RAD Studio XE7에서 추가된 안드로이드 기능 익히기(동영상) Humphery 2014.11.05 2059
902 패키지 개발방식과 DLL개발방식의 차이와 장단점 김원경 2018.05.02 2051
901 [업데이트] RAD Studio XE7 Update 1 개선된 내용 Humphery 2014.11.27 2044
900 [업데이트][Hotfix] iOS 배포와 요세미티, VCL Bitmap 파일 보안취약점 패치 Humphery 2014.10.22 2044
899 [오픈소스] 델파이 컴포넌트, 프레임워크, 라이브러리, 리소스 등등 관리자 2017.02.15 2042
898 이 달의 기술자료 - 2016년 07월 file 험프리 2016.06.30 2038
897 QueryPerformanceCounter 사용 시 주의사항(x86, 64bit) Humphery 2014.05.07 2035
896 이 달의 기술자료 - 2014년 5월 file 험프리 2014.05.19 2006
895 [10.3 리오][업데이트 1] What's NEW! 신기능 자세히 보기 험프리 2019.02.18 1997
894 [Step UP! 마이그레이션] RAD 업그레이드 마이그레이션 기술 브리핑 자료(2014.8.21) 관리자 2014.08.22 1995
893 [오픈소스] Python for Delphi(P4D) [5] file 험프리 2017.09.01 1983
892 [로드맵] RAD 스튜디오 로드맵(2016년 8월) file 험프리 2016.08.12 1983
891 부산가톨릭대학교 특강 발표자료 Humphery 2014.03.13 1983
890 엔터프라이즈 커넥터 - 엠바카데로의 새로운 솔루션 [1] file 관리자 2017.07.12 1975
889 [XE8] Android 단말기 연결안될때 SDK 확인 및 설치 Humphery 2015.04.11 1966
888 Quality central Windows Client 이용방법 file Humphery 2014.04.30 1965
887 델파이로 국제화된 다국어 애플리케이션 만들기 Humphery 2014.12.10 1956
886 안드로이드 각종 설정값 제어 예제. c2design 2014.08.14 1945
885 [기술문서] 델파이와 유니코드 관리자 2014.09.16 1938
884 [발표자료] 20160830 나만의 C++애플리케이션 완성하기 with C++빌더 험프리 2016.08.26 1921