Mounting Tim engine under /api

Jan Provaznik jprovazn at redhat.com
Mon Jan 7 13:28:10 UTC 2013


Hi,
I wonder what is preferred way of mounting Tim engine in Conductor. For 
UI Tim will be mounted at "/tim":
mount Tim::Engine, :at => "tim"

But Tim resources should be accessible through our API too (under /api),
there were two proposals how to do this:

1) mount Tim engine under /api, so Tim's resources will be nested:
scope "/api", :as => 'api' do
   mount Tim::Engine, :at => "tim" # other mountpoint name can be used
end

A disadvantage is that there will be another entrypoint for Tim:
https://gist.github.com/4474874
As Petr pointed out the entrypoint problem could be solved if Tim engine 
provides a method or partial which returns its resources - this would be 
then included directly in Conductor's entrypoint.


2) "include" Tim's resources in /api, so these resources will not be 
nested, I suppose this requires enumerate all Tim resources:
scope "/api", :as => 'api' do
   resources :templates, :only => [:index, :create, :show, :update, 
:destroy]
   resources :base_images, :only => [:index, :create, :show, :update, 
:destroy]
   # same for the rest of resources
end

A disadvantage is that namespace safety is lost - e.g. if there will be 
2 engines with resource 'template', we will have to do some resource 
renaming (sounds like a big problem to me) and it also requires to 
manage another chunk of code outside of Tim.


Unless there is strong disagreement till tomorrow, I will use option 1 
which seems to be most reasonable option to me.

Jan


More information about the aeolus-devel mailing list