Ada banyak tutorial tentang cara menggunakan beberapa koneksi database di Rails serta membangun API di Rails. Beberapa menit dari Googling akan memberi Anda banyak contoh. Tapi di sini ada beberapa pendekatan sederhana:
Untuk beberapa koneksi database, Anda benar, Anda harus memiliki info koneksi untuk kedua database yang ditentukan di database.yml
Anda mengajukan. Contoh:
# 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 tidak akan melakukan apa pun dengan blok tambahan ini kecuali jika Anda secara eksplisit menyuruhnya. Praktik umum adalah mendefinisikan model ActiveRecord abstrak yang akan membuat koneksi kedua:
class ReportingRecord < ActiveRecord::Base
establish_connection( "#{Rails.env}_reporting_db".to_sym )
self.abstract_class = true
end
Kemudian, buat model baru untuk tabel yang berada di database pelaporan Anda dan mewarisi dari ReportingRecord
bukannya 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
Untuk membangun API, ada banyak cara berbeda untuk melakukannya. Terlepas dari pendekatan Anda, saya sangat menyarankan Anda memastikan itu hanya dapat diakses melalui HTTPS. Berikut adalah pengontrol dasar dengan satu tindakan yang merespons permintaan json:
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
Contoh ini mengharuskan Anda untuk menentukan token akses di config/secrets.yml
berkas:
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)
Memilih antara solusi API dan beberapa DB sebagian besar bergantung pada bagaimana aplikasi Anda dapat berkembang di masa mendatang. Pendekatan multiple DB biasanya lebih mudah diterapkan dan memiliki kinerja yang lebih tinggi. API cenderung menskalakan secara horizontal lebih baik dan basis data yang memiliki koneksi hanya dari satu aplikasi, bukan dari 2 atau lebih, cenderung lebih mudah dipelihara dari waktu ke waktu.
Semoga membantu!