2015-10-13 1 views
0

J'ai une fonction Ruby très simple à utiliser, que je veux mettre à disposition via une API Web. L'API est essentiellement un point d'extrémité unique, par ex. http://example.com/crunch/<number> et renvoie la sortie JSON.Bibliothèque Ruby avec le moins d'encombrement possible pour héberger une API simple et très simple.

Je peux évidemment installer Rails et l'implémenter rapidement. Je n'ai plus besoin d'aide d'un 'framework' autre que de gérer le HTTP pour moi. Aucun ORM, MVC et autres fioritures. À l'autre extrémité, je peux écrire du code Ruby pour écouter sur un port et accepter la requête GET et analyser les en-têtes HTTP, etc., etc. Je ne veux pas non plus réinventer cette roue.

Que puis-je utiliser pour exposer une API minimale sur le Web en utilisant quelque chose avec le moins de place/dépendances. Je lis à propos de Sinatra, Ramaze, etc., mais je crois qu'il peut y avoir un moyen de faire quelque chose d'encore plus simple. Puis-je simplement pirater du code sur Rack pour faire ce que j'essaie de faire?

Ou en d'autres termes, ce qui sera le plus simple Ruby équivalent du code suivant dans nodejs:

var http = require('http'); 

http.createServer(function (req, res) { 
    res.writeHead(200, {'Content-Type': 'text/plain'}); 
    var ans = crunch(number); 
    res.end(ans); 
}).listen(1337, "127.0.0.1"); 

console.log('Server running at http://127.0.0.1:1337/'); 
+0

Par "Rake" je suppose que vous voulez dire "Rack". Rake est "Ruby Make", alors que Rack est la couche intermédiaire sous Rails, Sinatra, etc. Vous pouvez répondre à votre question en lisant la documentation de Rack, Sinatra, Ramaze, et voir quel est leur code minimal pour créer un serveur. Utiliser quelque chose avec le moins d'encombrement/de dépendances pourrait signifier que vous écrivez beaucoup plus de code, alors qu'est-ce qui est le plus important, votre temps et votre facilité de débogage, ou votre empreinte? –

+0

@theTinMan, je voulais absolument dire Rack. Je vais éditer la question. Je vais vérifier le code Rack. Merci pour la direction –

+0

Je vérifierais vraiment Sinatra. C'est incroyable le peu de code qu'il faut pour créer un serveur utilisable. 'get '/' {'hi'}' en est l'essentiel. –

Répondre

3

Vous semblez comme vous voulez utiliser directement Rack. "Rack from the Beginning" est un didacticiel décent qui devrait vous aider à démarrer.

Ce sera probablement quelque chose comme ceci:

class CrunchApp 
    def self.crunch(crunchable) 
    # top-secret crunching 
    end 
    def self.call(env) 
    crunchy_stuff = input(env) 
    [200, {}, crunch(crunchy_stuff)] 
    end 
    private 
    def self.input(env) 
    request = Rack::Request.new(env) 
    request.params['my_input'] 
    end 
end 

Rack::Server.start app: CrunchApp 

Mais je dois dire, en utilisant qu'au lieu de quelque chose comme Sinatra semble stupide à moins que cela est juste un projet amusant à jouer avec les choses. Voir leur 'Hello World':

require 'sinatra' 

get '/hi' do 
    "Hello World!" 
end 
+0

Merci @nick, vous avez posté la réponse pendant que j'écrivais encore le pseudo code dans nodejs et il semble exactement similaire. J'aurais aimé pouvoir revenir sur la réponse si j'avais assez de points. –

+0

Convenu à propos de Sinatra. C'est très puissant et donne un code vraiment propre. Mélanger dans le soutien Haml et Sequel et c'est mon go-to. –

0

Ruby-Grape est une bonne option pour votre cas d'utilisation. Il a une implémentation minimale sur Rack qui permet la création de points de terminaison REST-API simples.

Cuba est une autre bonne option avec une couche mince sur Rack lui-même. Si vous êtes familier avec Rails, vous pouvez utiliser le Rails API gem qui est très bien documenté avec un surdébit minime. Rappelez-vous également que Rails-API fera partie de Rails 5.

Dernier, mais pas le dernier, vous pouvez l'implémenter directement sur Rack.