Best way to build a JSON API coupled with HTML views in a Rails project

apijsonrubyruby-on-rails

I've got a Rails eCommerce project communicating with an iOS app. The iOS app receives JSON data from the Rails back-end, but there's also HTML rendering when a user comes to the project from his browser. They basically call the same actions (create, destroy, update, etc.) from both sides.

/website/my_action → HTML rendering
/website/my_action.json → API

What's the best way to organize our Rails app to stay DRY and avoid messy code / code smell ? The project currently uses respond_to a lot but i'm wondering if we shouldn't switch to a split system with default json response:

/api/v1/my_action
/website/my_action

And if so, how would you do concretely?

Here's a sample of one method in the current system

  def get_following

    @user = User.find(params[:id]) 

    respond_to do |format|
      format.html { render :index }
      format.json { render :json => ApiFormat.success(:followers, user.following) }
    end

  end

It looks fine but becomes very messy in some methods I prefer not to show. In short: how would you refacto the project in a more efficient way?

Best Answer

To me it seems like it would make more sense to split them with an api namespace for all the json controllers. What did you end up doing?

Related Topic