[RUBY] Construire une API de tableau d'affichage avec certification et autorisation dans le contrôleur Rails 6 # 5, implémentation des routes

Création d'une API de tableau d'affichage avec autorisation de certification avec Rails 6 # 4 après validation, implémentation de test

Faire un contrôleur

Depuis que j'ai fait un modèle la dernière fois, je vais implémenter un contrôleur cette fois.

$ rails g controller v1/posts

Une fois exécuté, un contrôleur et un fichier de spécification de demande seront générés.

Pour le moment, implémentez le contrôleur comme suit.

app/controllers/v1/posts_controller.rb


# frozen_string_literal: true

module V1
  #
  #  post controller
  #
  class PostsController < ApplicationController
    before_action :set_post, only: %i[show update destroy]

    def index
      # TODO
    end

    def show
      # TODO
    end

    def create
      # TODO
    end

    def update
      # TODO
    end

    def destroy
      # TODO
    end

    private

    def set_post
      @post = Post.find(params[:id])
    end

    def post_params
      params.permit(:subject, :body)
    end
  end
end

Créez un contrôleur selon CRUD une fois sans logique. De plus, couper l'espace de noms appelé V1 est une méthode souvent utilisée dans le développement d'API. Cela facilite la séparation et le développement lors de la création de la version 2 qui n'est pas rétrocompatible.

Ensuite, définissez les itinéraires.

config/routes.rb


 # frozen_string_literal: true

 Rails.application.routes.draw do
+   namespace "v1" do
+     resources :posts
+   end
 end

Cela définira les routes CRUD. Allons vérifier.

$ rails routes
...
                               Prefix Verb   URI Pattern                                                                              Controller#Action
                             v1_posts GET    /v1/posts(.:format)                                                                      v1/posts#index
                                      POST   /v1/posts(.:format)                                                                      v1/posts#create
                              v1_post GET    /v1/posts/:id(.:format)                                                                  v1/posts#show
                                      PATCH  /v1/posts/:id(.:format)                                                                  v1/posts#update
                                      PUT    /v1/posts/:id(.:format)                                                                  v1/posts#update
                                      DELETE /v1/posts/:id(.:format)                                                                  v1/posts#destroy
...

Implémentation du test d'index

Comme d'habitude, implémentez d'abord le test. En tant que comportement

J'irai. Je n'inclurai pas de pager pour un simple didacticiel d'application de test, mais je pourrais écrire un article dans le futur.

spec/requests/v1/posts_controller.rb


# frozen_string_literal: true

require "rails_helper"

RSpec.describe "V1::Posts", type: :request do
  describe "GET /v1/posts#index" do
    before do
      create_list(:post, 3)
    end
    it "Le code de réponse normal est renvoyé" do
      get v1_posts_url
      expect(response.status).to eq 200
    end
    it "Le numéro est renvoyé correctement" do
      get v1_posts_url
      json = JSON.parse(response.body)
      expect(json["posts"].length).to eq(3)
    end
    it "Les réponses sont renvoyées dans l'ordre décroissant de l'identifiant" do
      get v1_posts_url
      json = JSON.parse(response.body)
      first_id = json["posts"][0]["id"]
      expect(json["posts"][1]["id"]).to eq(first_id - 1)
      expect(json["posts"][2]["id"]).to eq(first_id - 2)
    end
  end
end

En d'autres termes, pour résumer le comportement, LIGNE 10: il "Le code de réponse normal est renvoyé" Début du bloc LIGNE 8: 3 messages sont enregistrés LIGNE 11: Faites une demande d'obtention à v1_posts_url (v1 / posts / index) LIGNE 12: Le code de réponse est: ok (200 normal) LIGNE 13: il "Le code de réponse normal est renvoyé" Fin de bloc. Revenu à 0 enregistrement de publication LIGNE 14: il "Le numéro est renvoyé correctement" Début du bloc LIGNE 8: 3 messages sont enregistrés LIGNE 15: Faire une demande d'obtention à v1_posts_url (v1 / posts / index) LIGNE 16: Convertir response.body en JSON.parse et en tableau Ruby LIGNE 17: Le poste de réponse est de 3 enregistrements LIGNE 18: il "Le numéro est renvoyé correctement" Fin du bloc. Revenu à 0 enregistrement de publication ↓ ...

Ce sera.

À ce stade, le contrôleur n'est pas implémenté, donc bien sûr le test est de la mousse.

Strictement parlant, le test final nécessite une comparaison de created_at, mais une simple comparaison est faite par id. À l'origine, vous devriez également tester la limite, mais l'omettre. Si vous êtes curieux, essayez d'implémenter un test qui fait 21 create_list et confirme que seulement 20 sont renvoyés.

Tips.

En passant, je vais vous présenter la méthode factoryBot que j'utilise souvent.

Ajouter example.com aux hôtes

De plus, le test des demandes nécessite les mesures suivantes.

config/application.rb


...
     config.hosts << ".amazonaws.com"
+    config.hosts << "www.example.com"
...

Cela est dû au fait que le test rspec est reconnu comme une demande de www.example.com.

Implémentation d'index

app/controllers/v1/posts_controller.rb


...
     def index
-      # TODO
+      posts = Post.order(created_at: :desc).limit(20)
+      render json: { posts: posts }
     end
...

Vous pouvez maintenant obtenir la liste. J'essaierai de frapper l'API avec curl.

$ curl localhost:8080/v1/posts
{"posts":[{"id":2,"subject":"","body":"hoge","created_at":"2020-09-06T01:07:52.628Z","updated_at":"2020-09-06T01:07:52.628Z"},{"id":1,"subject":"hoge","body":"fuga","created_at":"2020-09-05T13:50:01.797Z","updated_at":"2020-09-05T13:50:01.797Z"}]}

Si des données vides sont renvoyées, essayez de créer un enregistrement de publication à partir de rails c.

Si vous pouvez le faire, n'oubliez pas d'exécuter rubocop et rspec, puis git commit.

A continué

Création d'une API de tableau d'affichage avec autorisation de certification dans Rails 6 # 6 show, création de l'implémentation

[Vers la table de sérialisation]

Recommended Posts

Construire une API de tableau d'affichage avec certification et autorisation dans le contrôleur Rails 6 # 5, implémentation des routes
Implémentation n ° 8 pour créer une API de tableau d'affichage avec autorisation de certification dans Rails 6
Créer une API de tableau d'affichage avec autorisation de certification dans Rails 6 # 13 Accorder l'en-tête d'authentification
Construire une API de tableau d'affichage avec certification et autorisation avec Rails 6 # 18 ・ Implémentation du contrôleur de l'utilisateur final
Créez une API de tableau d'affichage avec certification et autorisation dans Rails 6 # 6 show, créez une implémentation
Introduction de # 10 devise_token_auth pour créer une API de tableau d'affichage avec autorisation d'authentification dans Rails 6
Introduction de l'expert n ° 15 pour créer une API de tableau d'affichage avec certification et autorisation dans Rails 6
Créez une API de tableau d'affichage avec certification et autorisation dans Rails 6 # 17 Ajoutez des privilèges d'administrateur
Créer une API de tableau d'affichage avec autorisation de certification dans la mise à jour Rails 6 # 7, détruire l'implémentation
Construire une API de tableau d'affichage avec certification et autorisation dans Rails 6 # 14 Seed Affichage du temps d'exécution
# 16 paramètre de stratégie pour créer une API de tableau d'affichage avec autorisation de certification dans Rails 6
Créez une API de tableau d'affichage avec certification et autorisation avec Rails 6 # 1 Construction de l'environnement
Présentation du sérialiseur n ° 9 pour créer une API de tableau d'affichage avec certification et autorisation dans Rails 6
Créer une API de tableau d'affichage avec autorisation dans Rails 6 # 12 Association d'utilisateur et de publication
Présentation de # 2 git et rubocop pour créer une API de tableau d'affichage avec autorisation d'authentification dans Rails
Créer une API de tableau d'affichage avec autorisation de certification dans Rails 6 # 11 Test et validation du modèle utilisateur ajoutés
Créez une API de tableau d'affichage avec certification et autorisation avec Rails 6 # 3 RSpec, FactoryBot introduit et post-modèle
[Procédure d'implémentation] Créer une fonction d'authentification utilisateur à l'aide de sorcellerie dans Rails
J'ai essayé d'implémenter l'API Rails avec TDD par RSpec. part3-Implémentation d'action avec authentification-
J'ai essayé de créer une fonction de groupe (babillard) avec Rails
J'ai essayé d'implémenter l'API Rails avec TDD par RSpec. part1-Implémentation de l'action sans authentification-
Créez un tableau d'affichage simple avec Java + MySQL
Essayez de créer un babillard en Java
Comment créer une API avec GraphQL et Rails
[Note] Créez un environnement Python3 avec Docker dans EC2
[Comment insérer une vidéo dans un hameau avec Rails]
Utilisation de l'API PAY.JP avec Rails ~ Préparation de l'implémentation ~ (payjp.js v2)
Environnement Build Rails (API) x MySQL x Nuxt.js avec Docker
Créer un SlackBot avec AWS lambda et API Gateway en Java
Je suis tombé sur un gars avec deux points dans les rails
Comment configurer un proxy avec authentification dans Feign