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 21596
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 20217
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 22272
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 28027
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 29313
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 24636
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 45568
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 181110
243 [도서/PDF] 한 번에 개발하는 안드로이드&iOS 앱 with 델파이 2편 - 3장. 데이터스냅으로 멀티티어 데이터베이스 앱 만들기 관리자 2020.02.06 499
242 리눅스에 RAD서버 배포하기 관리자 2019.07.11 499
241 이 달의 기술자료 - 2016년 12월 file 험프리 2016.11.24 499
240 [발표자료] 20200609 What's NEW! RAD스튜디오 10.4 시드니 file 관리자 2020.06.10 498
239 [팁] C++멀티쓰레드 활용하기: 모바일, 데스크탑 앱을 위한 멋진 UX 구현하기 관리자 2019.12.19 498
238 RAD서버 도커(Docker) 기술 가이드 관리자 2020.02.26 496
237 겟잇 패키지 매니저를 사용하면 협업을 위한 프로젝트 공유와 전환이 간편해집니다. 험프리 2017.07.07 496
236 ‘장기 활용 가능성’이 가장 뛰어난 프레임워크는? (델파이 VS. WPF VS. ELECTRON) 관리자 2021.02.01 495
235 [발표자료] VCL 애플리케이션 확장하기 with RAD 서버 관리자 2020.07.22 495
234 [발표자료] 9월 3일 "사물인터넷 실제 구현하기, DeepDive" 관리자 2015.09.04 495
233 [발표자료] 소개합니다! RAD Studio 10.2 도쿄 관리자 2017.04.06 493
232 [베를린] 설치 작업이 개선되어 원하는 기능만 신속히 설치, 변경할 수 있습니다. file 험프리 2016.04.21 492
231 XE7과 XE8에서 iOS 9용 iOS 32비트 애플리케이션을 빌드하는 절차안내. Humphery 2015.09.25 491
230 이 달의 기술자료 - 2018년 12월 file 험프리 2018.11.30 491
229 새로운 VCL 윈도우 테마 - Zircon 관리자 2020.02.14 490
228 이 달의 기술자료 - 2017년 05월 file 험프리 2017.04.26 489
227 [10.2 도쿄] 디버거 기능 김원경 2017.03.23 488
226 새로운 VCL 윈도우 테마 - Material Patterns Blue 관리자 2020.02.25 488
225 [무료 기술백서] 스마트한 크로스-플랫폼 앱 개발 관리자 2019.05.13 488
224 [10.3 리오][업데이트1] iOS 12, iPhone X 시리즈 디바이스들 지원 관리자 2019.02.22 488