레일에 편안한 공공 API를 설계하기위한 모범 사례는 무엇입니까?
-
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을 제공합니다.
제휴하지 않습니다 StackOverflow