-
Notifications
You must be signed in to change notification settings - Fork 117
Migration Guide
Please reference the New Features and Breaking Changes sections of the documentation.
taffy.core.baseRepresentation
is now taffy.core.baseSerializer
; taffy.core.nativeJsonRepresentation
is now taffy.core.nativeJsonSerializer
; etc.
Where previously you could only support one mime type per getAsFoo()
method, you may now supply a comma-delimited list to taffy:mime
and that method will be used if any of its list values is the requested response mime type: taffy:mime="application/json,text/json"
These allow you to accept multiple data formats as input. Just as with Serializers, the default uses ColdFusion's native JSON (de)Serialize functionality. You can extend or replace it as you see fit. More information here.
If you're using things like EHCache, you may find benefit in the new Caching Hooks.
When you want to abort a request from inside onTaffyRequest()
, just use noData()
or representationOf()
just as you would from inside a resource.
In all 1.x versions of Taffy, we asked you to use applicationStartEvent()
instead of onApplicationStart()
and requestStartEvent()
instead of onRequestStart()
. The only benefit to this approach was not having to explain how, where, and when to use super.onApplicationStart()
and super.onRequestStart()
. But you're smart people, so let's just rip this band-aid off now, while the ripping is good.
There is no 100% "always do it this way" guarantee... but there is a rule of thumb.
There's a good chance you're not doing anything crazy in your Application.cfc; or at least I hope so. For the sake of explanation, let's say that in your old applicationStartEvent()
method you defined a datasource application variable, and in your old requestStartEvent()
method you injected some CGI variable into the request scope. (Yes, this example is contrived. Can you do better? :P)
OLD, BAD, DEPRECATED CODE:
component extends="taffy.core.api" {
function applicationStartEvent(){
application.dsn = "myDSN";
}
function requestStartEvent(targetPath){
request.https = CGI.https;
}
}
How do you rewrite this old, bad, deprecated style in the new 2.x hotness format? Like this... (hold on to your butts...)
NEW HOTNESS:
component extends="taffy.core.api" {
function onApplicationStart(){
application.dsn = "myDSN";
super.onApplicationStart();
}
function onRequestStart(targetPath){
request.https = CGI.https;
super.onRequestStart(arguments.targetPath);
}
}
Yes folks, it's that easy. Rename the methods, and add super.[same-method-name]()
at the end.
Just because this example shows that you should call super.[same-method-name]()
at the end of your implementations doesn't mean you can't call it earlier. Just be aware that when you call super.onApplicationStart()
Taffy inspects variables.framework
to setup the framework config (so you'll need to setup your 3rd party bean factory BEFORE calling super...). Similarly, when you call super.onRequestStart(targetPath)
Taffy handles reload and dashboard requests, and a few other odds and ends.
If you're not sure what's right, ask on the mailing list!
Prior to Taffy 1.1 you could pass an additional argument to the representationOf()
method in your resource CFC, as well as to the newRepresentation()
method when in onTaffyRequest()
that would use a representation class that differed from your default. This feature was deprecated in 1.1 and instead all supported mime types should be implemented by a single representation class. That class is now defined as variables.framework.representationClass
These methods (of Application.cfc) were deprecated in Taffy 1.1 in favor of Configuration via Metadata.
These methods were deprecated in Taffy 1.2 in favor of variables.framework.
- configureTaffy
- setGlobalHeaders
- getGlobalHeaders
- enableCrossDomainAccess
- setDefaultRepresentationClass
- registerExtensionRepresentation
- setReloadKey
- setReloadPassword
- enableDashboard
- setDashboardKey
- setDebugKey
- setDefaultMime
- setUnhandledPaths
- setBeanFactory
- getBeanFactory
In Taffy 1.3 we deprecated using ?dashboard
as in: http://api.example.com/?dashboard in favor of displaying the dashboard when no resource is specified; e.g. http://api.example.com/ or http://example.com/api/v1/ or http://example.com/api/v1/index.cfm
At the same time, a new variables.framework setting was introduced to define Taffy's behavior if the dashboard were to be requested while disabled.