[RUBY] Créer un service d'API RESTful à l'aide de Grape

Aperçu

J'ai créé un service d'API RESTful à l'aide de raisin, je vais donc le résumer. Après l'avoir créé, j'ai utilisé Postman pour vérifier le comportement.

environnement

ruby 2.6.5

Rails 5.2.4

Ce que tu as fait

-Créez n'importe quel utilisateur dans le fichier Seeds. gem utilise du raisin. Créez en mode API.

-Accès du client à l'aide de Postman pour enregistrer, mettre à jour et supprimer des données. Obtenez des données -L'application a été créée pour que les fonctions CRUD générales et l'acquisition de données puissent être acquises à l'aide de JSON.

Créez d'abord une application

console


$ rails new sample_app

Cette fois, le nom de l'application était "sample_app".

Installez d'abord la gemme

Ajoutez ce qui suit

Gemfile



gem ‘grape’ #Créez facilement des API RESTful avec des applications Rack telles que des rails et sinatra
gem 'grape-entity’ #Si seul le raisin est utilisé, toutes les valeurs seront affichées. grain de raisin-Vous pouvez utiliser une entité pour limiter et mettre en forme les éléments d'affichage.
gem ‘grape_on_rails_routes’  #Il facilite la lecture et l'écriture des routes créées par l'API Grape.

Puis regroupez l'installation.

$ bundle install --path vendor/bundle

Configuration de la base de données

Générer un modèle d'utilisateur

console


$ bundle exec rails g model User name:string email:string age:integer
$ rails db:migrate

Préparez les données pour l'échantillon.

Créez db / seedss.rb avec le contenu suivant.

db/seeds.rb


User.create(name: 'Sony', email: '[email protected]', age: '40')
User.create(name: 'Fredo', email: '[email protected]', age: '38')
User.create(name: 'Tom', email: '[email protected]', age: '35')
User.create(name: 'Michael', email: '[email protected]', age: '33')
User.create(name: 'Connie', email: '[email protected]', age: '30')

Demandez à la base de données de lire le fichier.

$ bundle exec rake db:seed

Structure du répertoire

Créez la structure de répertoires suivante.

~/sample_api/
  ├ app/api/
  │    └ api.rb
  │    └ resources/
  │          └ v1/
  │            └ root.rb
  │        └ user.rb
  │       └ entities/
  │      └ v1/
  │        └ root_entity.rb
  │        └ user_entity.rb

paramètres de chargement automatique

Assurez-vous que les fichiers sous app / api sont chargés automatiquement.

config/application.rb


module SampleApi
  class Application < Rails::Application
    #..  
    # app/Charger automatiquement le fichier rb sous api
   + config.paths.add File.join('app', 'api'), glob: File.join('**', '*.rb')
   + config.autoload_paths += Dir[Rails.root.join('app', 'api', '*')]
  end
end

Créer une API

Montez dans la relation [parent-enfant-petit-fils-arrière-petit-fils] comme indiqué dans la figure ci-dessous.

config/routes.rb  # [parent]Paramètres de routage
  └ app/api/api.rb # [Enfant]Classe parent API
      └ app/api/resources/v1/root.rb # [Petit fils]Classe parent API v1
          └ app/api/resources/v1/users.rb # [Arrière-petit-fils]classe userAPI

[Parent] config / routes.rb

Définissez le routage.

config/routes.rb


Rails.application.routes.draw do
# app/api/api.Monter RB
+ mount API => ‘/' #Avec cette méthode, la classe de base pointe vers chaque action de la classe, vous n'avez donc pas besoin d'ajouter une route à chaque action.
end

[Enfant] app / api / api.rb

Créez une classe parent API.

app/api/api.rb


class API < Grape::API
  #Nom du premier segment de l'url ex) http://localhost/api/
  prefix 'api'
  # app/api/resources/v1/root.Monter RB
  mount Resources::V1::Root
end

[Petit-fils] app / api / resources / v1 / root.rb

Créez une classe parente pour l'API v1.

app/api/resources/v1/root.rb


module Resources
  module V1
    class Root < Grape::API
      version 'v1'
      format :json
      content_type :json, 'application/json'

      # app/api/resources/v1/users.Monter RB
      mount Resources::V1::Users
    end
  end
end

​ Ensuite, créez un fichier Entity avant de créer la classe userAPI. Si vous ne créez pas cela, les données que vous ne souhaitez pas afficher, telles que l'heure de création et l'heure de mise à jour, seront affichées lors de l'acquisition des données.

Créer une classe parent pour Entity

app/api/entities/v1/root_entity.rb


module Entities
  module V1
    class RootEntity < Grape::Entity

    end
  end
end

Créer un fichier d'entité pour userAPI

Afficher uniquement le nom, l'adresse e-mail et l'âge.

(Created_at et updated_at ne sont pas affichés)

app/api/entities/v1/user_entity.rb


module Entities
  module V1
    class UserEntity < RootEntity
      # name, email,Afficher seulement l'âge
      expose :name, :email, :age
    end
  end
end

Créez une classe pour userAPI.

app/api/resources/v1/user.rb


module Resources
  module V1
    class Users < Grape::API
      resource :users do
        desc "user list"
        get do
          present User.all, with: Entities::V1::UserEntity  # with:Appliquez le contenu du fichier d'entité en définissant ~ ~
        end

        desc "create new user"
        params do
          requires :name, type: String
          requires :email, type: String
          requires :age, type: Integer
        end
        post do
          User.create!({ name: params[:name], email: params[:email], age: params[:age] })
        end

        desc "Update user"
        route_param :id do 
          put do
            User.find(params[:id]).update({ name: params[:name], email: params[:email], age: params[:age] })
          end
        end

        desc "show user"
        params do
          requires :id, type: Integer, desc: "user id"
        end
        get ":id" do
          present User.find(params[:id]), with: Entities::V1::UserEntity #Il en va de même pour cette acquisition de données.
        end

        desc "Delete user"
        route_param :id do
           delete do
             user = User.find(params[:id])
             user.destroy
           end
        end
      end
    end
  end
end
$ rails grape:routes or rake grape:routes
        GET  |  /api/:version/users(.:format)      |  v1  |  user list      
       POST  |  /api/:version/users(.:format)      |  v1  |  create new user
        PUT  |  /api/:version/users/:id(.:format)  |  v1  |  Update user    
        GET  |  /api/:version/users/:id(.:format)  |  v1  |  user_show      
     DELETE  |  /api/:version/users/:id(.:format)  |  v1  |  Delete user

Vous pouvez voir la liste des routes de l'API Grape en exécutant la commande ci-dessus.

Vous avez créé l'API jusqu'à présent. De là, nous vérifierons si la fonction CRUD et l'acquisition de données peuvent être effectuées correctement en utilisant Postman.

Vous pouvez confirmer l'acquisition en entrant l'URI ci-dessus après le démarrage des rails.

Vérification des demandes et des réponses à l'aide de Postman

URL du facteur https://www.postman.com/ スクリーンショット 2020-09-18 17.38.25.png

Lancer Postman L'inscription est facile si vous suivez les instructions.

Démarrer le serveur local

$ rails s

Créer des données

Définissez les données à enregistrer dans Body au format JSON et exécutez

Méthode: Post

URL:http://localhost:3000/api/v1/users

Body: raw JSON(application/json)

Body


{
  “name”:"Échantillon"
  “email”: “[email protected]”
  “age”: 19
}

Modifiez les paramètres du facteur comme ci-dessus et appuyez sur le bouton d'envoi スクリーンショット 2020-09-18 16.20.13.png

Vous pouvez voir qu'un nouvel utilisateur est enregistré avec le 6ème identifiant dans la colonne ci-dessous.

Modifier les données (mettre à jour)

Mettez à jour les informations enregistrées. Définissez les informations à modifier dans l'élément Body.

Méthode: mettre

URL:http://localhost:3000/api/v1/users/:id (: id est la valeur d'id enregistrée dans la base de données, définie sur 6 ici)

Body:raw JSON(application/json)

Body


{
  “name”:"échantillon"
  “email”: “[email protected]”
  “age”: 20
}

スクリーンショット 2020-09-18 16.24.30.png

La mise à jour est en cours.

Supprimer les données (détruire)

Supprimer les informations enregistrées

Méthode: Supprimer

URL:http://localhost:3000/api/v1/users/:id

(: id est la valeur d'id enregistrée dans la base de données, définie sur 6 ici)

スクリーンショット 2020-09-18 16.29.27.png

J'ai réussi à supprimer les données créées précédemment.

Obtenir des données (index)

Obtenez toutes les informations enregistrées. Essayez d'obtenir 5 données enregistrées en tant que données de semences.

Méthode: Get

URL:http://localhost:3000/api/v1/users

スクリーンショット 2020-09-18 16.20.50.png

Vous pouvez vérifier les données enregistrées ci-dessous.

Obtenir des données par identifiant (afficher)

Spécifiez l'id à partir des informations enregistrées et n'acquérez que des informations spécifiques (les informations de données d'id: 6 avant d'être supprimées sont acquises).

Méthode: Get

URL:http://localhost:3000/api/v1/users/:id

スクリーンショット 2020-09-18 16.24.56.png

Nous avons pu confirmer le comportement de la fonction CRUD. Je n'ai pas suffisamment étudié les fonctions de Postman, je vais donc l'approfondir.

De plus, comme il existe encore diverses fonctions pour les gemmes de raisin, nous les apprendrons à les maîtriser.

Recommended Posts

Créer un service d'API RESTful à l'aide de Grape
Créer une loterie avec Ruby
[Android] Créer un calendrier à l'aide de GridView
Créer un projet Jetty à l'aide d'Eclipse
Créer un projet Tomcat à l'aide d'Eclipse
Créer une fonction de filtrage en utilisant actes-as-taggable-on
Un moyen simple de créer une classe de mappage lors de l'utilisation de l'API
Créez rapidement un environnement Web à l'aide de Docker
Créez une fonction de connexion à l'aide de l'option Swift
Créer une API à l'aide de Retrofit2, Okhttp3 et Gson (Java)
[Android] Créer un menu coulissant sans utiliser la vue de navigation
Créez instantanément un environnement Privoxy + Tor à l'aide de Docker
[Rails] Comment créer un graphique à l'aide de lazy_high_charts
[Java] Créez quelque chose comme une API de recherche de produits
Créez une application Spring Boot à l'aide d'IntelliJ IDEA
Créer un serveur API Web avec Spring Boot
Une histoire sur la création d'un service qui propose des améliorations à un site Web à l'aide d'une API d'apprentissage automatique
Créez un environnement de développement Java à l'aide de jenv sur votre Mac
Un mémorandum lors de la tentative de création d'une interface graphique à l'aide de JavaFX
Créer un service avec un modèle vide Liferay 7.0 / DXP
Créez un écran d'authentification de connexion à l'aide de la fonction de session
[Java] Créer un filtre
Créons un système de téléchargement de fichiers à l'aide de l'API Azure Computer Vision et du SDK Java d'Azure Storage
[Rails] Créez un bot d'écho à l'aide de l'API de messagerie LINE.
Créer un SlackBot avec AWS lambda et API Gateway en Java
Créer un projet Tomcat en utilisant Eclipse Pleiades All in One
Création d'un MOB à l'aide du plug-in Minecraft Java Mythicmobs | Préparation 1
Comment créer un portlet de générateur de services dans Liferay 7 / DXP