Delphi framework for multi-tier REST/JSON HTTP/HTTPS application server development and ORM remoting.
v3.1.1 (August 2, 2018)Version history
- New : TXDataWebConnection.OnResponse event intercepts any successful HTTP request made by XData web client framework
- Improved : XData Music demo improvements
- Fixed : Servers with Int64 type in model were not supported when used from TMS Web client
- New : XData Music Web Application demo. A full web application example using TMS XData server using TMS Web Core as web front-end. Full source code is provide, and the online version of demo is available at https://app.devgems.com/xdata/music/app.
- New : TXDataWebClient.ReferenceSolvingMode allows automatic solving of $ref occurrences in JSON response, which is now the default behavior.
- New : Demos XData Web-Client Framework, showing use of TXDataWebClient, TXDataWebDataset and integration with FNC Grid.
- New : TXDataWebDataset.CurrentData provides the underlying JSON object of the current web dataset record.
- New : TXDataWebConnection.Open method allows providing callbacks for connection successful and connection error.
- New : TXDataWebConnection.OnRequest and TXDataWebClient.OnRequest events allow intercepting and modifying outgoing requests (for example, to add authentication headers).
- New : TXDataWebConnection.OnError event which is fired whenever an error happens while performing requests to XData server from TMS Web Core apps.
- New : TXDataWebConnection.DesignData allows adding custom headers at design-time (for example authorization) to properly connect to XData server.
- New : TXDataWebClient.RawInvoke allows high-level invoking of service operations from TMS Web Core applications.
- New : TXDataWebClient request methods (List, Get, Post, RawInvoke, etc.) now have overloaded methods that accept callback functions.
- New : Full-featured TMS XData Web-Client Framework provides RAD, design-time and high-level components for building web applications using TMS Web Core and TMS XData. Buildling a REST API-based web application has never been as easy, including dataset-like usage that feels home to Delphi developers.
- Improved : TXDataWebDataset.SetJsonData now accepts non-array values (to edit a single object, for example).
- Improved : TXDataWebClient.Get overloaded method allows passing an additional query string (to use $expand option for example).
- Improved : TXDataServerModule.Create overload requiring just BaseUrl - no database connection pool is needed. Useful for XData servers that do not connect to a database or have specific database usage.
- Improved : TMS Web Core-only TXDataConnection and TXDataDataset components has been renamed to TXDataWebConnection and TXDataWebDataset. This is a breaking change.
- Improved : Smooth design-time experience with TXDataWebDataset. Manually loading field defs are not necessary anymore - just connect dataset to a web connection, provide the URL and fields will be loaded automatically at both design-time or runtime. Design-time menu option "Load Field Defs" has been removed.
- Improved : Editing TXDataWebDataset.EntitySetName at design-time in object inspector now provides a combobox with the list of available names retrieved from the server.
- Improved : Dataset fields now supported in TXDataWebDataset. They will contain data (list of objects) for associated lists (many-valued associations).
- Fixed : Memory leaks when using mobile/Linux compilers (when using automatic reference counting)
- Fixed : Exceptions that were not inherited from EXDataHttpException were wrongly reporting an error code (regression)
- New : OnModuleException event allows for a more flexible custom error-handling processing of exception raised during XData processing request.
- Fixed : deserialization of array of objects was keeping the same instance for all objects in the array.
- Fixed : OnEntityModifying event was being fired before merge operation thus not providing correct information about the object in manager and previous state. Breaking change that can be disabled by using _FixEntityModifyingOnUpsert := False
- New : TXDataClient.Count method. Allows retrieving the number of entities in a specific resource endpoint, optionally using a query filter
- New : TQueryParser.AddMethod allows registering custom SQL Functions to be called from XData query API.
- New : TMS RADical WEB enabled! The TMS framework for front-end Web development, TMS RADical WEB has been released and TMS XData is immediately a first-class citizen of this new ecosystem.
- New : MultiTentant Demo included in distribution shows how to use XData with multi-tentant applications (multiple databases being accessed by the same server).
- New : /$model built-in URL returns metadata for the whole XData API.
- Improved : A connection was being retrieved from the pool even when the context manager was not being used by a service operation.
- Fixed : Service operations invoked via GET method using enumerated type parameters are now supported.
- New : TXDataRequestHandler.ManagedObjects property.
- New : Support for default parameter values in service operations from non-Delphi clients (default parameters were already supported in Delphi clients).
- New : Several new types supported in service operations. Generic arrays, Generics lists of primitive types, Sets, TStrings type.
- New : OpenAPI/Swagger support.
- New : JsonNamingStrategy attribute.
- New : JsonInclude attribute in PODO classes.
- New : JsonEnumValues attribute.
- Fixed : Error when using params of type TDate (TDateTime was not affected) in service operations (Regression).
- Fixed : Design-time wizard icon not showing correctly in Delphi 10.2 Tokyo.
- New : XDataProperty and XDataExcludeProperty attributes.
- New : TXDataSeverModule.UnknownMemberHandling property.
- New : Support for passing parameters by reference in service operations.
- New : JsonProperty and JsonIgnore attributes.
- New : Filter functions startswith, endswith and contains.
- New : Filter function concat.
- Fixed : Using TStream as a parameter for service operations was causing "JSON converter not found" error.
- New : Linux support using Delphi 10.2 Tokyo and later.
- Fixed : Location header of POST responses now uses host of the client request, not the host configured in XData module.
- New : Delphi 10.2 Tokyo Support
- Fixed : Server-side stack overflow when trying to load a proxy property sent by the client, if the parent entity of that proxy was merged into the current Object Manager
- New : Demo project showing authentication using JWT (JSON Web Token)
- Fixed : XData Server Wizard generating corrupted source code when TMS Component Pack was installed
- Fixed : Sporadic server error loading proxied lists sent by the client
- Fixed : JWT encoding not working on XE6
- New : Url convention now allows $count path segment to retrieve number of entities in a resource.
Fixed : TXDataClient.Service
failing for Android clients when compiling in Release config
- Fixed : RefCount property was wrongly being serialized in PODO objects from mobile clients
- New : TXDataServerModule.SerializeInstanceType property controls how xdata type metadata will appear in JSON response
- New : TXDataServerModule.SerializeInstanceRef property controls how instances of same object will be represented in JSON response
- New : Support for entities that have associations in ID (primary key containing foreign keys)
- New : Support for Variant-type parameters in service operations when using GET HTTP method.
New : Support for Nullable
values in PODO classes
- New : Breaking change: TXDataServerModule.PutMode property controls how PUT will behave at server-side
- New : $expand query option allows clients to have full control on how associated entities appear in JSON response.
- Improved : Errors on query syntax now return http code 400 instead of 500
- Fixed : JSON Proxies (@xdata.proxy) sent by the client were not being solved when reading such properties at server-side
- Fixed : Association references (@xdata.ref) were not being solved when receiving entities in service operations parameters.
- New : TXDataServerModule.SetEntitySetPermissions allows configuring what operations are available in each resource type
- New : Service operations can now receive and return any type of object. This increases flexibility significantly as you can use any type of object for structure input/output parameters, or to send/receive DTO classes, etc.
- New : Service operations can now receive and return TJSONAncestor objects (Delphi XE6 and up only). This allows full control over the JSON request and response.
- New : Service operations can now receive and return TCriteriaResult objects, making it easy to return Aurelius query results that use projections.
- New : Server-Side Events allow subscribing listeners events and perform additional server-side logic
- New : Method TXDataModelBuilder.RemoveEntitySet for more flexibility when building XData models.
- New : JWT (Json Web Token) authentication and Basic authentication, thanks to new TMS Sparkle
- New : Delphi 10.1 Berlin support
- New : Authentication and authorization mechanism, based on TMS Sparkle
- New : $inlinecount query option allow retrieving the total number of entities when using paged results
- Improved : TXDataOperationContext.Current now also available in entity resources
- Improved : All server-side operation (entity CRUD, service operation execution) are now performed in database transactions
- New : Design-time wizard to create a XData Server with a few clicks
- Fixed : Service operation using enumerated types as parameters or function results not working properly
- Fixed : EntitySet requests were not taking xdata-expandlevel header into consideration. This is a breaking change.
- New : Delphi 10 Seattle support
- New : TXDataServerModule.DefaultExpandLevel allows defining the expand level of JSON responses when it's not defined by client request
- New : TXDataOperationContext Request and Response properties gives full control for service implementations to customize the processing of client requests
- New : TXDataClient.HttpClient property provides low level access to the Http client and allows using OnSendingRequest events to customize requests
- New : Several built-in functions available to increase flexibility when querying objects in REST requests. New available functions are Upper, Lower, Length, Substring, Position, Year, Month, Day, Hour, Minute and Second
- Fixed : TXDataClient Get, Delete, Patch and Put operations were broken when using entities with composite id
- Fixed : POST requests not working correctly with entities with composite key
- Fixed : Data Modification requests sending content-type header with parameter (for example, ";charset=UTF8") were causing errors
- New : URIPathSegment attribute allows specifying a different name for operation/service to be used in URL
- New : HttpMethod attribute allows specifying the HTTP method a service operation should respond to
- Fixed : GET requests with query order was sometimes causing the same column to appear multiple times in a "ORDER BY" SQL clause
- New : Support for Delphi XE8
- New : Support for CORS (Cross-origin resource sharing) preflighted requests
- Improved : Installer
- New : TXDataClient methods Get, Post, Put, Delete and List allows easy and high-level access to XData server objects from Delphi clients
- New : Server support for "x-http-method-override" header (allowing clients to tunnel HTTP methods to server through POST requests)
- New : Android and iOS support for XData client objects
- Fixed : Service operations returning nil entities should respond with status code 404
- Fixed : Issues with floating-point literals in Query URL with non-English server systems
- New : UserName and Password properties in TXDataServerModule for basic authentication protection
- New : Service Operations allow adding custom business logic to your server using interfaces and methods
- New : Multi-Model design makes it easy to create multiple servers with different mapping, types and service operations
- Fixed : Malfunctioning with $skip and $top query options
- New : Added Delphi XE7 support
for Delphi XE2, XE3, XE4, XE5, XE6, XE7, XE8, 10 Seattle, 10.1 Berlin, 10.2 Tokyo (Prof/Enterprise/Architect)
View licensing FAQ
- License for commercial use: Single developer license, Small team license, Site license
- Includes full source code
- Free 2 year updates and new releases
- Free priority support through email and forum