रेल में कई डेटाबेस कनेक्शन का उपयोग करने के साथ-साथ रेल में एपीआई बनाने के बारे में बहुत सारे ट्यूटोरियल हैं। गुगलिंग के कुछ मिनट आपको बहुत सारे उदाहरण देंगे। लेकिन यहाँ कुछ नंगे पैर दृष्टिकोण हैं:
एकाधिक डेटाबेस कनेक्शन के लिए, आप सही हैं, आपको अपने 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
रेल इस अतिरिक्त ब्लॉक के साथ कुछ भी नहीं करेंगे, हालांकि जब तक आप इसे स्पष्ट रूप से नहीं बताते हैं। सामान्य अभ्यास एक अमूर्त 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
एक एपीआई बनाने के लिए, इसे करने के कई अलग-अलग तरीके हैं। आपके दृष्टिकोण के बावजूद, मैं आपको अत्यधिक सुझाव दूंगा कि आप सुनिश्चित करें कि यह केवल HTTPS के माध्यम से सुलभ है। यहाँ एक बुनियादी नियंत्रक है जिसमें एक क्रिया है जो 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
इस उदाहरण के लिए आपको अपने 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)
एक एपीआई और एक से अधिक डीबी समाधान के बीच चयन करना ज्यादातर इस बात पर निर्भर करता है कि भविष्य में आपके आवेदन का विस्तार कैसे हो सकता है। एकाधिक डीबी दृष्टिकोण आमतौर पर कार्यान्वित करना आसान होता है और इसमें उच्च प्रदर्शन होता है। एक एपीआई क्षैतिज रूप से बेहतर पैमाने पर होता है और डेटाबेस जिसमें 2 या अधिक के बजाय केवल एक एप्लिकेशन से कनेक्शन होता है, समय के साथ बनाए रखना आसान हो जाता है।
आशा है कि यह मदद करता है!