Rails API Real Quick 만들기

이 블로그에서는 Ruby on Rails RESTful API를 만드는 기본 단계에 대한 간결한 개요를 시도합니다.

jump to the code on GitHub



지도 시간



단계


  • 새 Rails 프로젝트 만들기
  • 계획 모델/관계
  • 리소스 생성
  • 데이터베이스 생성/마이그레이션
  • 컨트롤러 설정

  • 1. 새 Rails 프로젝트 생성



    Rails가 설치되어 있다고 가정하고 <my-project>를 프로젝트 이름으로 대체하여 터미널에 다음 명령을 입력합니다.

    rails new <my-project> --api --database=postgresql
    

    Flags: The --api flag will forgo some of the extra junk a full Rails app has that I do not need. The --database flag lets you specify the type of database you prefer. I chose PostgreSQL. If you do not include this flag, the default database will be SQLite.





    시연을 위해 Evil Dog Catcher API를 생성하겠습니다.

    Google 이미지에서 찾은 이 개 포수 장난감을 확인하세요.



    어떤 부적응 아이가 개 포수 장난감을 가지고 놀고 싶어합니까? 이런.

    2. 계획 모델/관계



    Rails가 설치되는 동안 지금이 모델과 관계를 계획하기에 좋은 시기입니다. 이에 대한 명확한 아이디어를 미리 가지고 있으면 많은 골칫거리를 줄일 수 있습니다.

    나는 Catchers와 Dogs의 두 가지 모델과 함께 갈 것입니다.

    관계는 다음과 같습니다.
  • 포수는 많은 개를 가지고 있습니다.
  • 개는 포수에 속합니다.



  • 3. 리소스 생성



    다음으로 리소스를 생성하겠습니다. 이 명령은 각 모델 이름에 대한 마이그레이션, 모델, 컨트롤러 및 경로를 빠르게 설정합니다.

    rails generate resource <model> <attribute>:<type> <attribute>:<type>
    

    Tips: You can use g as shorthand for generate. Also, you can list another model’s name as an attribute with a type of references to automatically add a foreign key to that model.



    다음은 내 리소스 명령입니다.

    rails g resource catcher name:string city:string
    rails g resource dog name:string breed:string catcher:references
    

    References는 Dog 모델에 대한 외래 키를 제공하지만 수동으로 Catcher 모델 addhas_many :dogs로 이동해야 합니다.

    class Dog < ApplicationRecord
      belongs_to :catcher # set up by catcher:references
    end
    
    class Catcher < ApplicationRecord
        has_many :dogs # add this line
    end
    

    4. 데이터베이스 생성/마이그레이션



    모든 파일이 생성되면 이제 데이터베이스를 가동할 차례입니다. 먼저 마이그레이션 파일을 다시 확인하여 모든 것이 제대로 보이는지 확인합니다.

    class CreateCatchers < ActiveRecord::Migration[6.0]
      def change
        create_table :catchers do |t|
          t.string :name
          t.string :city
    
          t.timestamps
        end
      end
    end
    
    class CreateDogs < ActiveRecord::Migration[6.0]
      def change
        create_table :dogs do |t|
          t.string :name
          t.string :breed
          t.references :catcher, null: false, foreign_key: true
    
          t.timestamps
        end
      end
    end
    

    Note: Notice the line under CreateDogs that starts with t.references.... Because null: false, I will not be able to create a Dog unless it has the foreign key of a Catcher. If you want to be able to create models without this, set null: true.



    모든 것이 올바르게 보이므로 이제 다음 명령을 터미널에 입력하여 데이터베이스를 생성하고 마이그레이션하겠습니다.

    rails db:create
    rails db:migrate
    

    다음 단계에서 진행 상황을 다시 확인합니다.
  • 터미널에서 rails c 또는 rails console가 콘솔을 엽니다.
  • 콘솔에서 Catcher 인스턴스Catcher.create(name: 'test')와 Dog 인스턴스Dog.create(name: ‘test’, catcher_id: 1)를 만듭니다. 오류가 없어야 합니다.
  • Catcher.find(1).dogs를 입력하여 관계를 테스트합니다. 이것은 id가 1인 Catcher를 찾고 그들이 개가 있는지 나에게 보여줍니다. 나는 얻다:

  • <ActiveRecord::Associations::CollectionProxy [#<Dog id: 1, name: “test”, breed: nil, catcher_id: 1, created_at: “2020–10–04 06:39:15”, updated_at: “2020–10–04 06:39:15”>]>
    

    오류가 없으므로 다음 단계로 넘어갑니다.

    5. 컨트롤러 설정



    마지막 단계에서는 기본 인덱스 컨트롤러를 설정하고 Rails 서버에서 테스트합니다.

    class CatchersController < ApplicationController
    
        def index
            # grab an array of all catchers in db
            catchers = Catcher.all
            # render a json object of all catchers
            # include a sub array of their dogs with each catcher
            render json: catchers, include: :dogs 
        end
    
    end
    

    터미널에서 rails s 또는 rails server를 실행합니다. 브라우저에서 http://localhost:3000/catchers를 열고 모든 것이 작동하는지 확인합니다.



    Tip: For production purposes, you can open the CORS of this API to any website. Install the CORS gem by opening the Gemfile, uncommenting gem ‘rack-cors’, and run bundle install.



    # Use Rack CORS for handling Cross-Origin Resource Sharing (CORS), making cross-origin AJAX possible
    gem 'rack-cors'
    

    Next, access the config/application file. Find the class Application and — without altering any of the default code — insert the following:



    config.middleware.insert_before 0, Rack::Cors do
        allow do
            origins '*'
            resource '*',
                :headers => :any,
                :methods => [:get, :post, :delete, :put, :patch, :options, :head],
                :max_age => 0
        end
    end
    

    Remember to change the origins before deployment or this API will be available to anyone.



    결론



    이 시점에서 기본 API가 작동합니다. 다음 단계는 다른 사이트가 가져올 CORS에 대해 CORS를 열고 백엔드에서 수행하기를 원하는 모든 작업을 수행하도록 컨트롤러를 설정하는 것입니다.

    도움이 되었기를 바랍니다. 주로 API 설정을 위한 빠른 참조를 원했습니다. Rails에는 백만 개의 별칭과 바로 가기가 있다는 것을 알고 있습니다. 제안/수정 사항이 있는 경우. 의견을 주시거나 [email protected]로 이메일을 보내주십시오.

    좋은 웹페이지 즐겨찾기