APIのバージョニングは限局分岐でやるのが良い


TwitterAPI

APIURL/api/v1/*v2
 Kenn Ejima (@kenn) February 28, 2014

URL5API



API version

API version


API version


/api/session/create?id=foo&password=bar&api_version=1

session_tokenAPI versionapi_versionsession_token

LingrPankia

API Versioning - O'Reilly BroadcastHTTP Headerapi_version
X-Api-Version: 1

DumperOAuth


API version使JSONAPI version

使API version

RailsAPIOpenStruct使ApiContext.api_version = 1lib/api_context.rb
require 'ostruct'

class ApiContext
  class << self
    def method_missing(method_name, *args)
      Thread.current[:api_context] ||= OpenStruct.new
      Thread.current[:api_context].send(method_name, *args)
    end
end

app/controllers/application_controller.rbapp/controllers/api/base_controller.rb
class ApplicationController < ActionController::Base
  before_action :clear_context_variables

  def clear_context_variables
    Thread.current[:api_context] = nil
  end
end

before_action
ApiContext.api_version = request.headers['x-api-version'].to_i

ApiContext.api_version
if ApiContext.api_version > 1
  { result: [{ name: 'foo', age: 20 }] }
else
  { result: { name: 'foo', age: 20 } }
end



使Railsi18n使

MVCApiContext使




@kenn v2使v2使
 Yuichiro MASUI (@masuidrive) February 28, 2014



v299.9%v2

API version使API

.@kenn API URI 
 Kazuho Oku (@kazuho) February 28, 2014

URL

v2



RailsGemv1

v1, v2, v3





@kenn DB
 Taro Minowa Higepon (@higepon) February 28, 2014



JSONMVC

@kenn RESTful(radical versionin) http://t.co/zODm7mFr5B
 Tatsuhiko Miyagawa (@miyagawa) February 28, 2014

kwsk33Rebuild



MVC