DelphiMVCFramework 3.1.1-beryllium-RC6
Pre-release
Pre-release
·
1738 commits
to master
since this release
DelphiMVCFramework 3.1.1-beryllium (currently in RC phase)
- New! Added SQLGenerator and RQL compiler for PostgreSQL, SQLite and MSSQLServer (in addition to MySQL, MariaDB, Firebird and Interbase)
- Improved! Greatly improved support for HATEOAS in renders. Check
TRenderSampleController.GetPeople_AsObjectList_HATEOSand all the others actions end withHATEOSinrenders.dprojsample)
//Now is really easy to add "_links" property automatically for each collection element while rendering
Render<TPerson>(People, True,
procedure(const APerson: TPerson; const Links: IMVCLinks)
begin
Links.AddRefLink
.Add(HATEOAS.HREF, '/people/' + APerson.ID.ToString)
.Add(HATEOAS.REL, 'self')
.Add(HATEOAS._TYPE, 'application/json')
.Add('title', 'Details for ' + APerson.FullName);
Links.AddRefLink
.Add(HATEOAS.HREF, '/people')
.Add(HATEOAS.REL, 'people')
.Add(HATEOAS._TYPE, 'application/json');
end);
//Datasets have a similar anon method to do the same thing
Render(lDM.qryCustomers, False,
procedure(const DS: TDataset; const Links: IMVCLinks)
begin
Links.AddRefLink
.Add(HATEOAS.HREF, '/customers/' + DS.FieldByName('cust_no').AsString)
.Add(HATEOAS.REL, 'self')
.Add(HATEOAS._TYPE, 'application/json');
Links.AddRefLink
.Add(HATEOAS.HREF, '/customers/' + DS.FieldByName('cust_no').AsString + '/orders')
.Add(HATEOAS.REL, 'orders')
.Add(HATEOAS._TYPE, 'application/json');
end);
//Single object rendering allows HATEOAS too!
Render(lPerson, False,
procedure(const AObject: TObject; const Links: IMVCLinks)
begin
Links.AddRefLink
.Add(HATEOAS.HREF, '/people/' + TPerson(AObject).ID.ToString)
.Add(HATEOAS.REL, 'self')
.Add(HATEOAS._TYPE, TMVCMediaType.APPLICATION_JSON);
Links.AddRefLink
.Add(HATEOAS.HREF, '/people')
.Add(HATEOAS.REL, 'people')
.Add(HATEOAS._TYPE, TMVCMediaType.APPLICATION_JSON);
end);
- Better packages organization (check
packagesfolder) - New!
TMVCActiveRecord.Countmethod (e.g.TMVCActiveRecord.Count(TCustomer)returns the number of records for the entity mapped by the classTCustomer) - Change!
TMVCACtiveRecord.GetByPK<T>raises an exception if the record is not found - New!
containsclause has been added in the RQL compiler for Firebird and Interbase - New!
TMVCAnalyticsMiddlewareto do automatic analytics on the API (generates a CSV file). Based on an idea by Nirav Kaku (https://www.facebook.com/nirav.kaku). Check the sample in\samples\middleware_analytics\ - New!
TMVCActiveRecord.DeleteAlldeletes all the records from a table - New!
TMVCActiveRecord.DeleteRQLdeletes records using anRQLexpression aswhereclause. - New! Microsoft SQLServer Support in ActiveRecord and RQL (thanks to one of the biggest Delphi based company in Italy which heavily uses DMVCFramework)
- New! SQLite Support in MVCActiveRecord and RQL, so that MVCActiveRecord can be used also for Delphi mobile projects!
- Improved!
ActiveRecordShowCasesample is much better now. - Improved! In case of unhandled exception
TMVCEngineis compliant with the default response content-type (usually it did would reply usingtext/plain). - Fix! issue184.
- Breaking Change! In
MVCActiveRecordattributeMVCPrimaryKeyhas been removed and merged withMVCTableField, so nowTMVCActiveRecordFieldOptionis a set offoPrimaryKey,foAutoGenerated,foTransient(checkactiverecord_showcase.dprojsample). - Added! New overloads for all the Log* calls. Now it is possibile to call
LogD(lMyObject)to get loggedlMyObjectas JSON (custom type serializers not supported in log). - Fixed! issue164
- Fixed! issue182
- New!
StrDict(array of string, array of string)function allows to render a dictionary of strings in a really simple way. See the following action sample.
procedure TMy.GetPeople(const Value: Integer);
begin
if Value mod 2 <> 0 then
begin
raise EMVCException.Create(HTTP_STATUS.NotAcceptable, 'We don''t like odd numbers');
end;
Render(
StrDict(
['id', 'message'],
['123', 'We like even numbers, thank you for your ' + Value.ToString]
));
end;- New! Custom Exception Handling (Based on work of David Moorhouse). Sample "custom_exception_handling" show how to use it.
- Improved! Exceptions rendering while using MIME types different to
application/json. - Improved! JSONRPC Automatic Object Publishing can not invoke inherited methods if not explicitely defined with
MVCInheritableattribute. - Improved! Datasets serialization speed improvement. In some case the performace improves of 2 order of magnitude. (Thanks to https://github.com/pedrooliveira01)
- New! Added
inoperator in RQL parser (Thank you to João Antônio Duarte for his initial work on this) - New! Added
TMVCActiveRecord.Count<T>(RQL)to count record based on RQL criteria - New! Calling
<jsonrpcendpoint>/describereturns the methods list available for that endpoint. - New! Experimental (alpha stage) support for Android servers!
- New! Added support for
X-HTTP-Method-Overrideto work behind corporate firewalls. - New Sample! Server in DLL
- Improved! New consts defined in
HTTP_STATUSto better describe the http status response. - Improved! Now Firebird RQL' SQLGenerator can include primary key in "createinsert" if not autogenerated.
- New! Added support for
TArray<String>andTArray<Integer>in default json serializer (Thank you Pedro Oliveira) - Improved JWT Standard Compliance! Thanks to Vinicius Sanchez for his work on issue #241
- Improved! DMVCFramework now has 130+ unit tests that checks its funtionalities at each build!
- New! Shortcut render' methods which simplify RESTful API development
procedure ResponseCreated(const Location: String = ''; const Reason: String = 'Created'); virtual;procedure ResponseAccepted(const HREF: String; const ID: String; const Reason: String = 'Accepted'); virtual;procedure ResponseNoContent(const Reason: String = 'No Content'); virtual;
- New Installation procedure! Just open the project group, build all and install the design-time package (which is
dmvcframeworkDT)
| Delphi Version | Project Group |
|---|---|
| Delphi 10.3 Rio | packages\d103\dmvcframework_group.groupproj |
| Delphi 10.2 Tokyo | packages\d102\dmvcframework_group.groupproj |
| Delphi 10.1 Berlin | packages\d101\dmvcframework_group.groupproj |
| Delphi 10.0 Seattle | packages\d100\dmvcframework_group.groupproj |
| Delphi XE8 | packages\dxe8\dmvcframework_group.groupproj |
| Delphi XE7 | packages\dxe7\dmvcframework_group.groupproj |