Ces projets visent à être:
Résumé des spécifications:
Voici son application mobile Client Client qui consomme des données de cette API -> Android-base
Installez Ruby version 2.3.0 et définissez-le avec votre Ruby Environment Manager (plus d'informations ici).
Installez Postgres et démarrez le serveur PostgreSQL au premier plan (plus d'informations ici).
Clone le référentiel et entrer:
git clone git://github.com/jordifierro/rails-api-base.git --origin rails-api-base your-project-name
cd your-project-name
./bin/rename_project YourProjectName
./bin/remove_notes
./bin/create_psql_user yourprojectname
./bin/setup
rspec
./bin/reset_git https://github.com/yourusername/your-project-name.git
C'est tout, vous pouvez maintenant commencer à développer votre propre application!
(En développant sur LocalHost, démarrez MailCatcher afin de recevoir la confirmation de l'utilisateur et de récupérer les e-mails de mot de passe)
gem install mailcatcher
mailcatcher
L'application elle-même est presque vide, elle vise uniquement à fournir des modules de base, à implémenter les structures avec certains modèles et à donner un exemple de code. Voici les spécifications:
L'application comprend uniquement les modules liés à Rails-API, il est donc plus mince qu'une application normale mais n'a pas certaines fonctionnalités (qui peuvent être ajoutées manuellement si nécessaire). L'architecture de l'API suit les rails et les bonnes pratiques reposantes HTTP telles que:
Les routes de point de terminaison et la structure du code sont prêtes à ajouter de nouvelles versions API. La version est choisie via headers['Accept'] avec des valeurs comme application/vnd.railsapibase.v1 pour utiliser la première version.
Pour fournir l'exemple de code de l'application, il a été développé du code pour gérer notes (comme la représentation de notes de papier manuscrite), composée par un title et un content . Ainsi, l'application a les routes de notes, le contrôleur, le modèle et les RSPEC pour travailler avec ces notes.
Son objectif unique est d'être un guide sur la façon d'ajouter un nouveau code, il sera donc supprimé par le script shell bin/remove_notes .
Pour structurer les fonctionnalités du contrôleur global de l'API, différents modules ont été mis en œuvre comme ActiveSupport :: Concern et testés à l'aide de faux contrôleurs. Ces modules sont inclus au ApiController, qui est le contrôleur père du reste des contrôleurs (vérifiez ce message). À l'heure actuelle, il y a 4 modules: l'authentification, la gestion des erreurs, l'internationalisation et l'expiration de la version (vérifiez cet autre). Code Climate est le service utilisé pour vérifier que ceci et tout le reste du code suivent de bonnes pratiques (vous devez l'activer pour que votre projet l'utilise).
Le codeclimate peut également être exécuté localement avec sa CLI.
Presque toutes les API nécessitent des utilisateurs, des sessions et des authentifications, c'est donc la caractéristique la plus importante de cette application. La solution choisie utilise has_secure_password et has_secure_token avec une implémentation personnalisée pour gérer les sessions et les utilisateurs:
Un jeton est retourné lorsque les utilisateurs se connectent et doivent être définis sur headers['Authorization'] sur les demandes ultérieures pour les authentifier. Plus d'informations à ce sujet sur (ce post)
Pour vérifier si une version peut toujours être utilisée, il existe un module qui filtre avant chaque appel de méthode. Il renverra l'erreur si la version a expiré et qu'il y a également un point de terminaison pour vérifier la date d'expiration du client (par exemple: pour avertir l'utilisateur de mettre à jour l'application). Si vous souhaitez définir la date d'expiration sur une version concrète, définissez simplement un entier formaté sur String pour ENV['LAST_EXPIRED_VERSION'] . Toutes les versions égales ou inférieures au message d'erreur de mise à niveau spécifié seront demandées. Le système pour définir un avertissement sur certaines versions est le même, en utilisant ENV['LAST_WARNED_VERSION'] pour définir la version supérieure que vous souhaitez avertir. Plus d'informations à ce sujet sur (ce post)
L'application est traduite en anglais (langue par défaut) et en espagnol (tout comme l'exemple de traduction). Il existe un module simple qui prend les paramètres régionaux de request.env['HTTP_ACCEPT_LANGUAGE'] (qui peuvent être définis via l'en-tête d' Accept-Languange ) et le définit sur le système pour renvoyer automatiquement la traduction appropriée. Plus d'informations à ce sujet sur (ce post)
Pour tester que toutes les traductions nécessaires sont définies pour une langue spécifique, décommentez la ligne suivante dans le fichier spec_helper.rb , placez-y la langue cible et exécutez rspec :
I18n.default_locale = :es
Afin d'ajouter un certain contrôle sur les clients de l'API, il existe un système de vérification de clé API secrète qui peut être activé pour s'assurer qu'il s'agit d'un client valide qui crée l'utilisateur. Pour activer ce service, définissez simplement une valeur sur ENV['SECRET_API_KEY'] . La clé API secrète doit être envoyée chez headers['Authorization'] lors de l'appel de création d'une nouvelle méthode utilisateur.
Ce projet a été développé à l'aide du processus TDD et tout le code est testé à l'aide de RSPEC, en suivant les lignes directrices des meilleures pratiques définies sur BetterSpec.org. Il est important de le garder ainsi. Le climat de code vérifie que les tests couvrent tous les cas de code. Travis-CI est un système d'intégration continue qui exécute les tests chaque fois qu'une poussée est effectuée. Si vous souhaitez utiliser ces services, vous devez les activer sur leurs sites Web. Si vous ne le faites pas, supprimez simplement le fichier .travis.yml .
Pour éviter le fardeau de modifier manuellement le code pour préparer les fichiers pour démarrer un nouveau projet, certains scripts ont été implémentés. Vous pouvez les trouver à l'intérieur bin/ dossier (ils sont auto-détruits après utilisation).
Ils ont été analysés par Shellcheck.
Pour éviter les problèmes de déploiement, la base de données Postgres a été configurée depuis le début en tant que système de base de données pour les tests et le développement. Le fait qu'Heroku l'utilise comme système de base de données par défaut a également été pris en compte.
Le projet utilise les Rails 5.1.4 (module API) et Ruby 2.3.0 et a l'intention d'être tenu à jour à l'aide du service GEMNASIUM. Vous devez activer ce service pour votre dépôt si vous souhaitez l'utiliser.
Afin d'augmenter l'élégance et la lisibilité du code, ce guide de style Ruby a été utilisé comme référence. RuboCop Gem est un analyseur de code statique Ruby basé sur ce guide de style. Il suffit de courir:
gem install rubocop
rubocop
N'oubliez pas que le fichier .rubocop.yml définit la configuration (supprimez-la si elle n'est pas utilisée).
Les réponses sont formatées à l'aide du gemme ActiveModelSerializers. Les sérialiseurs sont responsables de formater la sortie JSON et sont un bon moyen de découpler cette couche à partir de modèles et de contrôleurs. De plus, ils sont versés comme des contrôleurs (par exemple: Api::V1::Serializer ) car ils interfèrent directement avec la sortie de chaque version API. Cela nous aidera à maintenir les anciens contrats de version.
Voici son application mobile Client Client qui consomme des données de cette API -> Android-base
Je ne suis pas un développeur expérimenté en rails, donc toutes les suggestions et contributions sont plus que les bienvenues!
rspec
rubocop
Malheureusement, il n'y a pas encore de contributeurs.
http://jordifierro.com