Railsで複数のデータベース接続を使用する方法やRailsでAPIを構築する方法についてのチュートリアルはたくさんあります。グーグルの数分はあなたにたくさんの例を与えるでしょう。しかし、ここにいくつかの最低限のアプローチがあります:
複数のデータベース接続の場合は、その通りです。両方のデータベースの接続情報をdatabase.yml
で定義する必要があります。 ファイル。例:
# Local Database
development:
adapter: mysql2
database: local_db
username: my_user
password: my_password
host: localhost
port: 3306
# Reporting Database
development_reporting_db:
adapter: postgresql
encoding: unicode
database: reporting
username: some_user
password: some_password
host: 1.2.3.4
port: 5432
Railsは、明示的に指示しない限り、この余分なブロックでは何もしません。一般的な方法は、2番目の接続を確立する抽象的なActiveRecordモデルを定義することです。
class ReportingRecord < ActiveRecord::Base
establish_connection( "#{Rails.env}_reporting_db".to_sym )
self.abstract_class = true
end
次に、レポートデータベースに存在し、ReportingRecord
から継承するテーブルの新しいモデルを作成します ActiveRecord::Base
の代わりに :
class SomeModel < ReportingRecord
# this model sits on top of a table defined in database.yml --> development_reporting_db instead of database.yml --> development
end
APIを構築するには、さまざまな方法があります。アプローチに関係なく、HTTPS経由でのみアクセスできるようにすることを強くお勧めします。これは、jsonリクエストに応答する1つのアクションを持つ基本的なコントローラーです:
class ApiController < ApplicationController
before_filter :restrict_access # ensures the correct api token was passed (defined in config/secrets.yml)
skip_before_action :verify_authenticity_token # not needed since we're using token restriction
respond_to :json
def my_endpoint_action
render :json => {some_info: 'Hello World'}, :status => 200 # 200 = success
end
private
rescue_from StandardError do |e|
render :json => {:error => e.message}.to_json, :status => 400 # 400 = bad request
end
# ensures the correct api token was passed (defined in config/secrets.yml)
def restrict_access
authenticate_or_request_with_http_token do |token, options|
token == Rails.application.secrets[:my_access_token]
end
end
end
この例では、config/secrets.yml
でアクセストークンを定義する必要があります ファイル:
development:
secret_key_base: # normal Rails secret key base
my_api_access_token: # put a token here (you can generate one on the command like using rake secret)
APIと複数のDBソリューションのどちらを選択するかは、主にアプリケーションが将来どのように拡張されるかによって異なります。マルチDBアプローチは、通常、実装が簡単で、パフォーマンスが高くなります。 APIは水平方向に拡張する傾向があり、2つ以上ではなく1つのアプリケーションからの接続を持つデータベースは、長期にわたって維持しやすい傾向があります。
これがお役に立てば幸いです!