2010-07-21 18 views
13

Ho diverse API con cui mi sto integrando e ho bisogno di chiamare in varie parti della mia applicazione.Come si memorizzano le chiavi per le API in Rails?

Qual è il modo di memorizzare le chiavi, l'utente/password o le informazioni sui token, ad esempio un file di configurazione e come chiamarli per l'utilizzo in altre parti dell'applicazione?

Grazie.

risposta

4

Il più semplice è memorizzare le informazioni come costanti nei vari file dell'ambiente. In questo modo è possibile utilizzare account diversi per lo sviluppo, la produzione, ecc è

# Eg 
# development/environment.rb 
.... 
API_1_USER = "user101" 
API_1_PW = "secret!" 

alternativa per creare un file YAML, poi leggerlo quando i segni app in un api. Questo è lo stile utilizzato dalle rotaie se stesso con la config/databse.yml file di

AGGIUNTO

È anche possibile memorizzare come costante usando un hash o di hash nidificato.

# Eg 
# development/environment.rb 
.... 
API_1 = {"user" => "user101", "pw" => "secret!"} 
API_2 = {"user" => "user102", "pw" => "double_secret"} 

# or nested hashes 
API_KEYS = { 
      "api_1" => {"user" => "user101", "pw" => "secret!"}, 
      "api_2" => {"user" => "user102", "pw" => "double_secret"}} 

# using them in another file: 
foo.signin(API_1['user'], API_1['pw']) 
# or 
foo.signin(API_KEYS["api_1"]['user'], API_KEYS["api_1"]['pw']) 

# note, I use string constants instead of symbols to save vm (since the hash is 
# not referenced more than once or twice). You could also use 
# symbols as the keys, especially if the hash will be referenced often: 
API_1 = {:user => "user101", :pw => "secret!"} 
+0

Se si segue questo approccio, io voto per gli hash annidati, piuttosto che per le costanti sottolineate. – Matchu

+0

Che cos'è un esempio di hash annidato? E poi come lo chiamerei nel controller che ha bisogno dell'accesso API, proprio come una variabile ALL CAP? – Angela

+0

Ho aggiunto un esempio di utilizzo degli hash come costanti –

7

È possibile memorizzare nomi utente/password e informazioni di configurazione simili in meccanismi già utilizzati da rotaie; è possibile sia roba i dati di configurazione direttamente nel vostro file di configurazione di ambiente (dove production, testing, e development sono configurati), oppure si potrebbe utilizzare il proprio meccanismo di e:

require "yaml" 
config_hash = YAML::load_file("/path/to/your/config.yaml") 
+0

Ciao, immagino di non seguire la configurazione. assomiglia a yaml, non ne ho già uno come file di configurazione dell'ambiente? – Angela

+0

Il suggerimento è di mantenere il proprio file di configurazione in YAML. In questo modo puoi separare le tue configurazioni specifiche dell'app dalle configurazioni di Rails. – Chris

+0

ok, vedo .... quindi creo il mio yaml e inserisco il codice nel file di configurazione? – Angela

0

Partenza Configatron, è abbastanza impressionante e può essere usato esattamente per questo scopo.

21

solo per mantenere questa domanda up-to-date, c'è un nuovo modo di fare questo in Rails 4.1:

From the Rails guides:

Rails 4.1 genera un nuovo file secrets.yml nella cartella config. Per impostazione predefinita, questo file contiene l'applicazione secret_key_base, ma potrebbe anche essere utilizzato per memorizzare altri segreti come le chiavi di accesso per le API esterne.

Problemi correlati