Link Search Menu Expand Document

Creazione di un backend API - PARTE 1 -

Preparazione dell’ambiente di lavoro

Nella vostra cartella di lavoro , creiamo una nuova cartella per il progetto di esempio:

    $ mkdir myapi && cd myapi

Se avete più versioni di ruby installate sul vostro sistema sarebbe meglio creare il file .ruby-version in cui specificare la versione di ruby

    $ vi .ruby-version 
    # dentro il file inseriamo la versione , nel mio caso 
    3.1.2
    # salviamo e usciamo dall'editor VI 

Adesso eseguiamo :

$ gem install rails 
$ gem install bundler 

Adesso creiamo il nostro progetto di esempio API:

$ rails new . --api 
# con questo comando verrà generato la base di progetto con database predefinito sqlite3 
# ma se volete personalizzare il database basta aggiungere l'opzione --database=postgresql

Adesso per semplicità proviamo la creazione di un model:

$ rails g scaffold Post title:string body:text 
# eh si e il classico esempio ;) 

$ rails db:migrate

Adesso dovreste avare nel routes una cosa del genere:

Rails.application.routes.draw do
    resources :posts
    # Define your application routes per the DSL in https://guides.rubyonrails.org/routing.html

    # Defines the root path route ("/")
    # root "articles#index"
end

Non modifichiamo niente, ma adesso aggiungiamo SWAGGER per testare e documentare le nostre API:

Apriamo il Gemfile e aggiungiamo queste gemme:

group :development do
    gem 'rspec-rails'
    # Speed up commands on slow machines / big apps [https://github.com/rails/spring]
    # gem "spring"
    gem 'factory_girl_rails'
    gem 'capybara'
    gem 'database_cleaner'
end

gem 'rswag'

Salvate il Gemfile ed eseguiamo :

$ bundle install 

Adesso eseguiamo la configurazione di RSPEC:

$ rails generate rspec:install

PS: le gemme capybara, database_cleaner, factory_girl_rails non le configuriamo ma ve le lasciamo perchè normalmente vengono installate quando si vuole usare RSPEC per il TDD. Maggiori info

Installazione SWAGGER

Swagger è un tool per testare e documentare le vostre API, si può usare sia in ambiente d sviluppo che di produzione ma con alcuni accorgimenti che per ora non tratteremo. Per maggiori info vi rimandiamo alla doc ufficiale Swagger info.

$ rails g rswag:install

Adesso eseguiamo la creazione di rspec per swagger per eseguire i test:

$ rails g rspec:swagger API::V1::PostsController

Questo comando va formattato a seconda del controller che deve essere testato, in questo caso PostsController La versione di API è V1 ma potrebbe cambiare quando si vogliono avere più versioni di API disponibili.

Adesso eseguo il comando:

$ rails rswag:specs:swaggerize    

che genera il file :

/swagger/v1/swagger.yaml 

Questo file serve per la configurazione di swagger. Vediamo nel mio caso:

---
openapi: 3.0.1
info:
title: API V1
version: v1
paths:
"/posts":
    post:
    summary: Create an Post
    tags:
    - posts
    parameters: []
    responses:
        '201':
        description: post created
        '422':
        description: invalid request
    requestBody:
        content:
        application/json:
            schema:
            type: object
            properties:
                title:
                type: string
                body:
                type: text
            required:
            - title
            - body
servers:
- url: http://{defaultHost}
variables:
    defaultHost:
    default: localhost:3000

ATTEZIONE: Nel nostro caso avendo solo un controller PostsController vedrete solo il path: /posts

Inoltre notate la modifica del url e del default :

url: http://{defaultHost}

e

default: localhost:3000

Viene creato il file rspec nel seguente path:

spec/requests/api/v1/[nome-controller]_spec.rb

Nel nostro caso : spec/requests/api/v1/posts_spec.rb

Il file si presenta come segue dopo alcune modifiche:

require 'swagger_helper'

RSpec.describe 'posts_controller', type: :request do
    path "/posts" do
        post "Create an Post" do
        tags "posts"
        consumes "application/json"
        parameter name: :title, in: :body, schema: {
            type: :object,
            properties: {
            title: { type: :string },
            body: { type: :string },
            },
            required: ["title", "body"],
        }
    response "201", "post created" do
            let(:post) { { title: "Primo", body: "Body test 1" } }
            run_test!
        end
    response "422", "invalid request" do
            let(:post) { { title: "Secondo" } }
            run_test!
        end
        end
    end
end

Alcune note

Aprite il file /spec/swagger_spec.rb e potete modificare il parametro defaultHost come segue:

defaultHost: {
    default: 'localhost:3000'
}

Conclusione

Adesso avviamo il server rails:

$ bundle exec rails server 

Apriamo l’ URL: http://localhost:3000/api-docs/index.html

e dovreste vedere la vostra interfaccia swagger e la possibilità di testare le vostre API

Per completezza se riaprite il file routes.rb dovreste avere una cosa del genere:

Rails.application.routes.draw do
    mount Rswag::Ui::Engine => '/api-docs'
    mount Rswag::Api::Engine => '/api-docs'
    resources :posts
    # Define your application routes per the DSL in https://guides.rubyonrails.org/routing.html

    # Defines the root path route ("/")
    # root "articles#index"
end

Tools Extra

  • Postman: Piattaforma per usare/testare tutto il lifecycle delle API. Vedi la guida ufficiale Postman

Copyright © 2023 RICSystem - partner DIAGO SRL -