Поддержка 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 мог бы выглядеть так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
procedure TGroupsResource1.Get(const AContext: TEndpointContext; <br> 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. Если добавить на модуль еще три компонента (см картинку),
то код упрощается до двух строк:
1 2 3 4 5 6 |
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
Design. Code. Compile. Deploy.
Start Free Trial Upgrade Today
Free Delphi Community Edition Free C++Builder Community Edition