2013-03-01 20 views
7

Sto cercando di creare un'API e sono preoccupato che tutte le mie risorse non siano accessibili con il dominio api.myapp.com o che "vivano" con l'uris sbagliato.Sottodominio API per l'app Heroku, è possibile?

Ho aggiunto il CNAME per il mio nome di dominio per indicare la mia app di Heroku. (es: la navigazione a www.myapp.com vi porta a https://myherokuapp.heroku.com)

Vorrei impostare un sottodominio API, in modo che un GET per https://api.myapp.com vi porta alla https://myherokuapp.heroku.com/api/v1

Il lo scenario migliore sarebbe che un POST a https://api.myapp.com/accounts/12345 creerebbe un nuovo account. È possibile?

(So che sottodomini (ad esempio: mysubdomain.myappname.heroku.com) non sono possibili con Heroku)

Credo che la risposta potrebbe essere in tre luoghi diversi:

  1. Qualcosa da fare con il provider DNS che inoltra le configurazioni (forse qualcosa a che fare con i record "A").
  2. Qualcosa da configurare in Heroku, probabilmente un componente aggiuntivo a pagamento per gestire domini/sottodomini.
  3. Gestisci tutti i sottodomini all'interno della mia app.
+0

hey @ Scott che sto cercando di fare la stessa cosa esatta, ma Heroku e GoDaddy - non riesco a farli funzionare. Saresti in grado di pubblicare la tua risposta alla soluzione di cui sopra: il tuo file di rotte? sarebbe molto utile per le 1500 persone che hanno così visualizzato la tua risposta. – BKSpurgeon

+0

@BKSpurgeon Sono passati quasi 4 anni da quando ho fatto questa domanda;) Ma sì, la risposta è nei commenti qui sotto: 1. Aggiungi il CNAME (Alias) api.myapp.com al mio DNS, e fallo punto a myherokuapp.heroku.com 2. Aggiungi il dominio api.myapp.com a Heroku. 3. Utilizzare un modulo nell'app del nodo per gestire il routing del sottodominio. Ho usato https://www.npmjs.com/package/express-subdomain per indirizzare tutto il traffico di sottodomini API verso l'endpoint API su myherokuapp.heroku.com/api/v1. Da allora, ho un server fai da te a Digital Ocean ($ 5/mese) e faccio il routing con Nginx prima ancora di colpire l'app. Approccio – Scott

risposta

2

Se si vuole distinguere tra api.mydomain.com e www.mydomain.com e hanno diversi controllori per le richieste API allora si potrebbe certamente utilizzare percorsi Rails vincolati al tuo sottodominio api per gestire questa

constraints :subdomain => "api" do 
    scope :module => "api", :as => "api" do 
    resources :posts 
    end 
end 

che utilizza quindi posts_controller.rb nella cartella app/controller/api della propria applicazione.

Avrai quindi entrambi www.mydomain.com e api.mydomain.com ha aggiunto un dominio personalizzato per l'applicazione e quindi i percorsi si occuperanno del resto.

Si potrebbe anche voler esaminare la Grape Gem per aiutare a costruire la vostra api

+0

interessante, anche se sto usando Node.js l'idea è la stessa. Quindi suggerisci che la mia app possa gestire tutte le richieste di sottodominio in arrivo. Posso utilizzare l'inoltro DNS dal mio provider DNS e inoltrare qualcosa come "https://myapp.com" a "https://myherokuapp.heroku.com/api/v1", ma non vedo come farlo inoltrare "https://api.myapp.com" a "https: //api.myherokuapp.heroku.com "Non penso sia possibile, e qualsiasi hit su api.myapp.com comporterà la modifica della barra degli indirizzi ... e il mio URI sarà legato al nome dell'app di heroku. Qualsiasi idea su come aggirare questo ? – Scott

+2

è possibile avere più domini su un'app di heroku, ad esempio api.mydomain.com e www.mydomain.com - si CNAME entrambi di questi a myapp.herokuapp.com e quindi aggiungerli come domini personalizzati tramite il pannello di controllo heroku. non vedrebbe la barra degli indirizzi cambiare, cioè se un visitatore colpisce api.myapp.com rimarrà tale e www.myapp.com rimarrà così. Una volta nella tua applicazione gestirai semplicemente la richiesta in base al sottodominio richiesto in in qualunque lingua tu stia codificando. –

+1

Il tuo consiglio su CNAME era quello di cui avevo bisogno. L'URL ora può essere api.myapp.com e reindirizza a myherokuapp.heroku.com senza modificare l'URL. Quindi in sintesi dovevo : 1. Aggiungi il CNAME (Alias) api.myapp.com al mio DNS, e io ho t point to myherokuapp.heroku.com 2. Aggiungi il dominio api.myapp.com a Heroku. 3. Utilizzare un modulo nella mia app per gestire i sottodomini. – Scott

Problemi correlati