2014-11-12 10 views
5

Relativamente nuovo a Rails. Sto cercando di chiamare un'API e dovrebbe restituire un URL univoco. Ho HTTParty in bundle nella mia app. Ho creato un controller UniqueNumber e ho letto diverse guide HTTParty per quello che voglio, ma forse sono solo un po 'perso e non ho davvero idea di cosa fare.Rails molto semplici 4.1 Chiamata API con HTTParty

Fondamentalmente, tutto ciò che devo fare è chiamare l'API, ottenere l'URL restituito, quindi inserire quell'URL nel database per un utente. Qualcuno può indicarmi la giusta direzione o condividere un codice con me?

+0

Potresti elaborare un po 'sulla parte API? E. è una API basata su JSON? Quale metodo HTTP è necessario utilizzare per ottenere i dati (GET/POST, ecc.)? Hai bisogno di inviare dati con la chiamata API? ecc. – Pete

+0

Non sono sicuro della parte JSON, penso di si? Invierò un'email chiedendo. Dovrei essere in grado di inviare semplicemente un reqeust GET. Non è necessario inviare alcun dato con la chiamata API. Ogni richiesta dovrebbe sputare un nuovo URL univoco – keith

risposta

7

Assumiamo l'API è in un formato JSON e restituisce i dati in questo modo:

{"url": "http://example.com/unique-url"} 

per mantenere le cose in ordine e ben strutturato, la logica API dovrebbe appartenere a essa la propria classe:

# lib/url_api.rb 
require 'httparty' 

class UrlApi 
    API_URL = 'http://example.com/create' 

    def unique_url 
    response = HTTParty.get(API_URL) 
    # TODO more error checking (500 error, etc) 
    json = JSON.parse(response.body) 
    json['url'] 
    end 
end 

Quindi chiamare quella classe nel controller:

require 'url_api' 

class UniqueNumberController < ApplicationController 
    def create 
    api = UrlApi.new() 
    url = api.unique_url 

    @user = # Code to retrieve User 
    @user.update_attribute :url, url 
    # etc 
    end 
end 

Fondamentalmente HTTParty restituisce una risposta obiettare che co ottiene i dati di risposta HTTP che includono sia le intestazioni che il contenuto effettivo (.body). Il corpo contiene una stringa di dati che puoi elaborare a tuo piacimento. In questo caso, stiamo analizzando la stringa come JSON in un hash di Ruby. Se è necessario personalizzare la richiesta HTTP per l'API, è possibile visualizzare tutte le opzioni nello HTTParty documentation.

+0

Dopo averlo messo a disagio per un po 'di tempo ora @peter non sono sicuro di come farlo eseguire realmente il codice? Quello che vorrei fare è quando un utente preme un pulsante di invio quando si registra, richiede automaticamente l'URL dell'API e lo inserisce nel campo URL nel database. Ha senso? Attualmente sto usando Devise nella mia app per gestire le iscrizioni degli utenti, ecc. – keith

Problemi correlati