Поддержка JSON-представления данных появилась в RAD Studio очень давно и с тех пор сильно видоизменялась и расширялась. Начиная с обеспечения разработок для DataSnap в DBX, и включая поддержку нереляционных данных и запросов MongoDB в FireDAC – JSON применяется как самая популярная опция представления и передачи данных, будь то нативные приложения на самых разных устройствах, или многоуровневые WEB-системы, поддерживающие много протоколов обмена и реализованные на любых популярных средствах разработки и инструментах.

За прошедшие годы RAD Studio получила признание, как средство исключительно быстрого создания корпоративных и индивидуальных back-end платформ, в том числе SOAP и сервис-ориентированных. Архитектура RAD Studio позволяет использовать для этого самые разные варианты решений работы с JSON, основанные на различных наборах компонент, имеющихся в первоначальном наборе или от независимых внешних разработчиков. 

В последнее время компания Embarcadero уделяет большое внимание развитию и расширению поддержки распространенных средств создания клиентских приложений для многоуровневых систем, в том числе популярных инструментов, библиотек и фреймворков для создания WEB-клиентов приложений, реализованных на JavaScript.

Возможности самого свежего релиза Tokyo 10.2 Release 2 были расширены для упрощения взаимодействия и обмена данными с JavaScript-клиентами, например, созданными на AngularJS, ReactJS или Sencha.

Лучше всего показать эту новую возможность на примерах. 

Откроем RAD Studio. Для примера будем создавать проекты на Delphi. Создадим новый проект New – Other – EMS Package. Данные будем брать из таблицы Employee одноименной БД из примеров для InterBase. Положим на форму TFDConnection и настроим его для соединения с этой БД. Также поместим на модуль TFDQuery, свяжем его с TFDConnection и зададим запрос SQL = 'Select * from EMPLOYEE'. Тогда, по-старому, обработчик вызова GET мог бы выглядеть так:

procedure TGroupsResource1.Get(const AContext: TEndpointContext; 
const ARequest: TEndpointRequest; const AResponse: TEndpointResponse); var ms: TMemoryStream; begin ms := TMemoryStream.Create; EmployeeTable.Close; try EmployeeTable.Open; EmployeeTable.SaveToStream(ms, TFDStorageFormat.sfJSON); AResponse.building.SetStream(ms, 'application/json', True); finally ms.Free; end; end;

Однако, в этом случае в тело ответа передаются не только найденные данные из запроса, но все описание датасета целиком, включая метаданные, в виде JSON. Для клиентов, написанных на JavaScript это не всегда приемлемо, поэтому часто приходится заменять этот короткий кусок кода значительно более сложным и длинным, чтобы сформировать jsonArray вручную.

Элегантное и быстрое решение стало возможно в Tokyo 10.2 Release 2 -  в этом релизе были расширены возможности поддержки JSON. Если добавить на модуль еще три компонента (см картинку),

то код упрощается до двух строк:

procedure TEmperorResource1.Get(const AContext: TEndpointContext;
  const ARequest: TEndpointRequest; const AResponse: TEndpointResponse);
begin
    FDBatchMoveJSONWriter1.JsonWriter := AResponse.building.JsonWriter;
    FDBatchMove1.Execute;
end;
  

Я выбрал для примера RAD Server и FireDAC, которые входят в стандартную поставку RAD Studio, но описываемые приемы настолько универсальны, что могут быть использованы в любых проектах, для любого WEB-сервиса, написанного на Delphi или C++Builder, даже в простейшем проекте WebBroker, с любым dataset, отличным от FireDAC – это открытое и очень гибкое решение. 

Подробнее можно ознакомиться на канале Embarcadero Russia YouTube    https://www.youtube.com/watch?v=PMjG76dKphY