Rails5.2 Grape으로 API 제작, Swagger 확인
RoR로 API 노트 만들기
버전마다 방법이 미묘하게 달라요.
프로젝트 작성
$ mkdir api_sample
$ cd api_sample
$ bundle init
Gemfile 편집# frozen_string_literal: true
source "https://rubygems.org"
git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
gem 'rails', '~> 5.2.2'
설치하다.$ bundle install --path vendor/bundle
$ bundle exec rails new . -d mysql
Gemfile에 추가# API
gem 'grape', '1.2.3'
gem 'hashie-forbidden_attributes', '0.1.1'
gem 'grape-jbuilder', '0.2.0'
gem 'grape_on_rails_routes', '0.3.2'
gem 'swagger-ui_rails', '0.1.7'
gem 'grape-swagger', '0.32.1'
gem 'grape-swagger-rails', '0.3.0'
오류 없음을 확인하기 위해 bundle install 다시 실행
모델 클래스 준비, 데이터 투입
$ bin/rails g model Task name:string description:string
db/seed.rb
seed.rbTask.create(name: 'タスク1', description: 'サンプルタスク1')
Task.create(name: 'タスク2', description: 'サンプルタスク2')
Task.create(name: 'タスク3', description: 'サンプルタスク3')
$ bundle exec rake db:create
$ bundle exec rake db:migrate
$ bundle exec rake db:seed
Grape을 통해 API 생성
경로
http://localhost:3000/api/v1/tasks/displays로 여러 설정에 접근하고 싶어서요.
config/routes.rbRails.application.routes.draw do
mount Versions::V1::API => '/'
mount GrapeSwaggerRails::Engine => '/api/swagger'
end
API 디렉토리 생성
프로젝트 바로 아래에 appi 폴더를 만들고 for Grape 아래 설명을 추가하여 API 프로그램을 설정합니다
config/application.rbrequire_relative 'boot'
require 'rails/all'
# Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production.
Bundler.require(*Rails.groups)
module ApiSample
class Application < Rails::Application
# Initialize configuration defaults for originally generated Rails version.
config.load_defaults 5.2
# Settings in config/environments/* take precedence over those specified here.
# Application configuration can go into files in config/initializers
# -- all .rb files in that directory are automatically loaded after loading
# the framework and any gems in your application.
# For Grape
config.paths.add File.join('app', 'api'), glob: File.join('**', '*.rb')
config.autoload_paths += Dir[Rails.root.join('app', 'api', '*')]
config.middleware.use(Rack::Config) do |env|
env['api.tilt.root'] = Rails.root.join 'app', 'views', 'api'
end
end
end
$ mkdir app/api
$ mkdir app/api/versions
$ mkdir app/api/versions/v1
API 생성
대원 제작 이런 것들 중에서include 단점 단위의 모듈은 관리하기 쉽다
/appi/vi/~ 내부는 이렇게 묘사되어 있습니다.
템플릿 지정 Jbuilder
app/api/versions/v1/api.rbmodule Versions
module V1
class API < Grape::API
version 'v1', using: :path
format :json
formatter :json, Grape::Formatter::Jbuilder
prefix :api
include ::Versions::V1::TaskDisplays
# :nocov:
if Rails.env.development?
add_swagger_documentation add_version: true
end
# :nocov:
end
end
end
각 API의 코드는 이렇습니다.명명 규칙에 유의하십시오.
app/api/versions/v1/task_displays.rbmodule Versions
module V1
module TaskDisplays
extend ActiveSupport::Concern
included do
namespace :tasks do
namespace :displays do
desc 'タスク一覧を取得する'
get '', jbuilder: 'v1/task_displays/index' do
@tasks = Task.all
end
end
end
end
end
end
end
이런 느낌.
app/views/api/v1/task_displays/index.jbuilderjson.tasks @tasks do |task|
json.(task, :id, :name, :description)
end
swagger 설정 파일
config/initializers/grape_swagger_rails.rbunless Rails.env.production?
GrapeSwaggerRails.options.app_name = 'Grape API Sample'
GrapeSwaggerRails.options.app_url = '/'
GrapeSwaggerRails.options.url = 'api/v1/swagger_doc.json'
end
확인
rails 시작 및 브라우저에서 확인bin/rails s
API
http://localhost:3000/api/v1/tasks/displays
swagger
http://localhost:3000/api/swagger
견본
샘플 코드
Reference
이 문제에 관하여(Rails5.2 Grape으로 API 제작, Swagger 확인), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/katafuchix/items/8a96e2fa9ddc8bc83545
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$ mkdir api_sample
$ cd api_sample
$ bundle init
# frozen_string_literal: true
source "https://rubygems.org"
git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
gem 'rails', '~> 5.2.2'
$ bundle install --path vendor/bundle
$ bundle exec rails new . -d mysql
# API
gem 'grape', '1.2.3'
gem 'hashie-forbidden_attributes', '0.1.1'
gem 'grape-jbuilder', '0.2.0'
gem 'grape_on_rails_routes', '0.3.2'
gem 'swagger-ui_rails', '0.1.7'
gem 'grape-swagger', '0.32.1'
gem 'grape-swagger-rails', '0.3.0'
$ bin/rails g model Task name:string description:string
Task.create(name: 'タスク1', description: 'サンプルタスク1')
Task.create(name: 'タスク2', description: 'サンプルタスク2')
Task.create(name: 'タスク3', description: 'サンプルタスク3')
$ bundle exec rake db:create
$ bundle exec rake db:migrate
$ bundle exec rake db:seed
Rails.application.routes.draw do
mount Versions::V1::API => '/'
mount GrapeSwaggerRails::Engine => '/api/swagger'
end
require_relative 'boot'
require 'rails/all'
# Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production.
Bundler.require(*Rails.groups)
module ApiSample
class Application < Rails::Application
# Initialize configuration defaults for originally generated Rails version.
config.load_defaults 5.2
# Settings in config/environments/* take precedence over those specified here.
# Application configuration can go into files in config/initializers
# -- all .rb files in that directory are automatically loaded after loading
# the framework and any gems in your application.
# For Grape
config.paths.add File.join('app', 'api'), glob: File.join('**', '*.rb')
config.autoload_paths += Dir[Rails.root.join('app', 'api', '*')]
config.middleware.use(Rack::Config) do |env|
env['api.tilt.root'] = Rails.root.join 'app', 'views', 'api'
end
end
end
$ mkdir app/api
$ mkdir app/api/versions
$ mkdir app/api/versions/v1
module Versions
module V1
class API < Grape::API
version 'v1', using: :path
format :json
formatter :json, Grape::Formatter::Jbuilder
prefix :api
include ::Versions::V1::TaskDisplays
# :nocov:
if Rails.env.development?
add_swagger_documentation add_version: true
end
# :nocov:
end
end
end
module Versions
module V1
module TaskDisplays
extend ActiveSupport::Concern
included do
namespace :tasks do
namespace :displays do
desc 'タスク一覧を取得する'
get '', jbuilder: 'v1/task_displays/index' do
@tasks = Task.all
end
end
end
end
end
end
end
json.tasks @tasks do |task|
json.(task, :id, :name, :description)
end
unless Rails.env.production?
GrapeSwaggerRails.options.app_name = 'Grape API Sample'
GrapeSwaggerRails.options.app_url = '/'
GrapeSwaggerRails.options.url = 'api/v1/swagger_doc.json'
end
bin/rails s
Reference
이 문제에 관하여(Rails5.2 Grape으로 API 제작, Swagger 확인), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/katafuchix/items/8a96e2fa9ddc8bc83545텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)