[RUBY] Erstellen Sie eine Bulletin Board-API mit Zertifizierung und Autorisierung im Rails 6 # 5-Controller und leiten Sie die Implementierung weiter

Erstellen einer Bulletin Board-API mit Zertifizierungsautorisierung mit Rails 6 # 4 nach Validierung, Testimplementierung

Machen Sie einen Controller

Da ich das letzte Mal ein Modell gemacht habe, werde ich dieses Mal einen Controller implementieren.

$ rails g controller v1/posts

Bei der Ausführung werden eine Controller- und eine Anforderungsspezifikationsdatei generiert.

Implementieren Sie den Controller vorerst wie folgt.

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

Erstellen Sie einmal ohne Logik einen Controller nach CRUD. Darüber hinaus wird das Schneiden des Namespace V1 häufig in der API-Entwicklung verwendet. Dies erleichtert das Trennen und Entwickeln beim Erstellen von Version 2, die nicht abwärtskompatibel ist.

Stellen Sie dann die Routen ein.

config/routes.rb


 # frozen_string_literal: true

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

Dadurch werden die CRUD-Routen festgelegt. Lass uns nachsehen.

$ 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
...

Implementierung des Indextests

Führen Sie den Test wie gewohnt zuerst durch. Als Verhalten

Ich werde gehen. Ich werde Pager nicht einschließen, da es sich um ein einfaches Tutorial für Testanwendungen handelt, aber ich werde möglicherweise in Zukunft einen Artikel schreiben.

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 "Der normale Antwortcode wird zurückgegeben" do
      get v1_posts_url
      expect(response.status).to eq 200
    end
    it "Die Nummer wird korrekt zurückgegeben" do
      get v1_posts_url
      json = JSON.parse(response.body)
      expect(json["posts"].length).to eq(3)
    end
    it "Die Antworten werden in absteigender Reihenfolge der ID zurückgegeben" 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

Mit anderen Worten, um das Verhalten zusammenzufassen, Zeile 10: it "Normaler Antwortcode wird zurückgegeben" Blockstart Zeile 8: 3 Beiträge werden gespeichert Zeile 11: Stellen Sie eine Get-Anfrage an v1_posts_url (v1 / posts / index). Zeile 12: Antwortcode lautet: ok (200 normal) Zeile 13: it "Normaler Antwortcode wird zurückgegeben" Blockende. Rollback auf 0 Post-Datensätze Zeile 14: it "Die Nummer wird korrekt zurückgegeben" Blockstart Zeile 8: 3 Beiträge werden gespeichert Zeile 15: Stellen Sie eine Get-Anfrage an v1_posts_url (v1 / posts / index). Zeile 16: Konvertieren Sie response.body in das Array JSON.parse und Ruby Zeile 17: Der Antwortbeitrag besteht aus 3 Datensätzen Zeile 18: it "Die Nummer wird korrekt zurückgegeben" Blockende. Rollback auf 0 Post-Datensätze ↓ ...

Es wird sein.

Zu diesem Zeitpunkt ist die Steuerung noch nicht implementiert, daher ist der Test natürlich Moos.

Genau genommen erfordert der endgültige Test einen Vergleich von created_at, aber ein einfacher Vergleich erfolgt über id. Ursprünglich sollten Sie auch das Limit testen, aber weglassen. Wenn Sie neugierig sind, implementieren Sie einen Test, der 21 create_list erstellt und bestätigt, dass nur 20 zurückgegeben werden.

Tips.

Übrigens werde ich die factoryBot-Methode vorstellen, die ich oft benutze.

Fügen Sie example.com zu Hosts hinzu

Darüber hinaus erfordert der Anforderungstest die folgenden Maßnahmen.

config/application.rb


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

Dies liegt daran, dass der rspec-Test als Anforderung von www.example.com erkannt wird.

Implementierung des Index

app/controllers/v1/posts_controller.rb


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

Jetzt können Sie die Liste erhalten. Ich werde versuchen, die API mit Curl zu treffen.

$ 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"}]}

Wenn leere Daten zurückgegeben werden, versuchen Sie, einen Post-Datensatz aus "Rails C" zu erstellen.

Wenn Sie dies tun können, vergessen Sie nicht, rubocop und rspec auszuführen und dann git commit.

Fortsetzung

Erstellen einer Bulletin Board-API mit Zertifizierungsberechtigung in Rails 6 # 6 zeigen, Implementierung erstellen

[Zur Serialisierungstabelle]

Recommended Posts

Erstellen Sie eine Bulletin Board-API mit Zertifizierung und Autorisierung im Rails 6 # 5-Controller und leiten Sie die Implementierung weiter
# 8 Seed-Implementierung zum Erstellen einer Bulletin Board-API mit Zertifizierungsautorisierung in Rails 6
Erstellen Sie eine Bulletin Board-API mit Zertifizierungsberechtigung in Rails 6 # 13 Grant-Authentifizierungsheader
Erstellen Sie mit Rails 6 # 18 eine Bulletin-Board-API mit Zertifizierung und Autorisierung. ・ Implementierung des Endbenutzer-Controllers
Erstellen Sie eine Bulletin Board-API mit Zertifizierung und Autorisierung in Rails 6 # 6. Zeigen Sie, erstellen Sie die Implementierung
Einführung von # 10 devise_token_auth zum Erstellen einer Bulletin Board-API mit Zertifizierung und Autorisierung in Rails 6
Einführung des Experten Nr. 15 zum Erstellen einer Bulletin-Board-API mit Zertifizierung und Autorisierung in Rails 6
Erstellen Sie eine Bulletin Board-API mit Zertifizierung und Autorisierung in Rails 6 # 17. Fügen Sie Administratorrechte hinzu
Erstellen Sie eine Bulletin Board-API mit Zertifizierungsberechtigung im Rails 6 # 7-Update und zerstören Sie die Implementierung
Erstellen Sie eine Bulletin Board-API mit Zertifizierung und Autorisierung in Rails 6 # 14 Seed. Anzeige der Ausführungszeit
# 16 Richtlinieneinstellung zum Erstellen einer Bulletin Board-API mit Zertifizierungsberechtigung in Rails 6
Erstellen Sie eine Bulletin-Board-API mit Zertifizierung und Autorisierung mit Rails 6 # 1 Environment Construction
Einführung des Serializers Nr. 9 zum Erstellen einer Bulletin-Board-API mit Zertifizierung und Autorisierung in Rails 6
Erstellen Sie eine Bulletin-Board-API mit Autorisierung in Rails 6 # 12 Assoziation von Benutzer und Beitrag
Erstellen Sie eine Bulletin Board-API mit Zertifizierung und Autorisierung in Rails 6 # 2 Einführung in Git und Rubocop
Erstellen Sie eine Bulletin-Board-API mit Autorisierung in Rails 6 # 11. Benutzermodelltest und Validierung hinzugefügt
Erstellen Sie eine Bulletin Board-API mit Zertifizierung und Autorisierung mit Rails 6 # 3 RSpec. FactoryBot wird eingeführt und ein Post-Modell erstellt
[Implementierungsverfahren] Erstellen Sie eine Benutzerauthentifizierungsfunktion mithilfe von Hexerei in Rails
Ich habe versucht, die Rails-API mit TDD von RSpec zu implementieren. Teil3-Aktionsimplementierung mit Authentifizierung
Ich habe versucht, mit Rails eine Gruppenfunktion (Bulletin Board) zu erstellen
Ich habe versucht, die Rails-API mit TDD von RSpec zu implementieren. Teil1-Aktionsimplementierung ohne Authentifizierung-
Erstellen Sie mit Java + MySQL ein einfaches Bulletin Board
Versuchen Sie, ein Bulletin Board in Java zu erstellen
So erstellen Sie eine API mit GraphQL und Rails
[Hinweis] Erstellen Sie eine Python3-Umgebung mit Docker in EC2
[So fügen Sie ein Video mit Rails in haml ein]
Verwenden der PAY.JP-API mit Rails ~ Implementierungsvorbereitung ~ (payjp.js v2)
Build Rails (API) x MySQL x Nuxt.js Umgebung mit Docker
Erstellen Sie einen SlackBot mit AWS Lambda & API Gateway in Java
Ich bin auf einen Typen mit zwei Punkten in Rails gestoßen
So richten Sie einen Proxy mit Authentifizierung in Feign ein