레일에 편안한 공공 API를 설계하기위한 모범 사례는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/144359

  •  02-07-2019
  •  | 
  •  

문제

Rails는 상자 밖에 편안한 자원이 제공되지만 실제 공개 API에 사용합니까? 그렇다면 API의 버전을 어떻게 달성 할 수 있습니까? example.com/api/v2/foo/bar?

도움이 되었습니까?

해결책

일반적으로 내 응용 프로그램의 API는 실제로 HTML 인터페이스를 구성하는 동일한 리소스를 기반으로 구축됩니다. 어떤 사람들에게는 스캐 폴드 생성기에서 나오는 코드를 사용하는 것일 수 있습니다. 그러나 사용자 정의를 작성했는지 또는 발전기가 처리하도록하든 관계없이 자원을 프로그래밍 방식에만 노출시키는 인스턴스는 거의 없습니다. 최종 사용자보기가 아닌 API.

버전화는 지금까지 구축 한 응용 프로그램에 문제가되지 않았지만이를 구현하는 두 가지 방법을 생각할 수 있습니다.

1) 접두사 'v1,' 'v2'등으로 경로를 추가 할 수 있습니다. 이는 컨트롤러에서 액세스 할 수있는 매개 변수를 설정하여 발생할 처리를 지정할 수 있습니다.

routes.rb에서 :

map.resources :posts, :path_prefix => '/:version'

posts_controller.rb에서

class PostsController < ApplicationController
  def index
    respond_to do |format|
      format.xml do
        if params[:version] == 'v1'
          # ...
        else
          # ...
        end
      end
    end
  end
end

2) 각 버전에 대한 사용자 정의 응답 형식 추가를 고려할 수도 있습니다.

이니셜 라이저/mime_types.rb에서

Mime::Type.register_alias "application/xml", :v1
Mime::Type.register_alias "application/xml", :v2

posts_controller.rb에서

class PostsController < ApplicationController
  def index
    respond_to do |format|
      format.v1 do
        # ...
      end
      format.v2 do
        # ...
      end
    end
  end
end

전자는 example.com/v1/posts.xml 및 example.com/v2/posts.xml과 같은 URL을 제공합니다. 후자는 example.com/posts.v1 및 example.com/posts.v2와 같은 URL을 제공합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top