webcamp:back-end developers day. Сергей Селецкий "Как упростить...

58
Как упростить разработку API на Ruby, используя TDD Сергей Селецкий @sseletskyy [email protected]

Upload: geekslab

Post on 12-Aug-2015

28 views

Category:

Technology


1 download

TRANSCRIPT

Как упростить разработку API на Ruby, используя TDD

Сергей Селецкий

@sseletskyy [email protected]

+ сравнение API движков + ускоряем рельсы + организовываем код + документация + тесты, factory girl, fixtures + фоновые задачи

ContentsСодержание

Cхема использования

Server API

Cхема обработки запроса в Rails

Cхема обработки запроса в Rails

REQUESTER

REQUESTER

Решения для разработки APIRAILS::API+ full stack

framework + requires rails

skills only - not so

lightweight

Решения для разработки APIRAILS::API GRAPE

+ API versioning + API doc gen - not a full stack

framework - requires expert

skills or integration with Rails

+ full stack framework

+ requires rails skills only

- not so lightweight

Решения для разработки APIRAILS::API GRAPE

+ lightweight - not a full stack

framework - requires

expert skills

SINATRA+ API versioning + API doc gen - not a full stack

framework - requires expert

skills or integration with Rails

+ full stack framework

+ requires rails skills only

- not so lightweight

+ отключить неиспользуемые subframeworks

GRAPE + RAILSУскоряем рельсы

+ отключить неиспользуемые subframeworks + отключить все middleware кроме router

GRAPE + RAILSУскоряем рельсы

> rake middleware

> rake middlewareuse Rack::Sendfile use ActionDispatch::Static use Rack::Lock use #<ActiveSupport::Cache::Strategy::LocalCache::Middleware:0x007fa9944b2a90> use Rack::Runtime use Rack::MethodOverride use ActionDispatch::RequestId use Rails::Rack::Logger use ActionDispatch::ShowExceptions use WebConsole::Middleware use ActionDispatch::DebugExceptions use BetterErrors::Middleware use ActionDispatch::RemoteIp use ActionDispatch::Reloader use ActionDispatch::Callbacks use ActiveRecord::Migration::CheckPending use ActiveRecord::ConnectionAdapters::ConnectionManagement use ActiveRecord::QueryCache use ActionDispatch::Cookies use ActionDispatch::Session::CookieStore use ActionDispatch::Flash use ActionDispatch::ParamsParser use Rack::Head use Rack::ConditionalGet use Rack::ETag

> rake middlewareapplication.rb

+ отключить неиспользуемые subframeworks + отключить все middleware кроме router + отключить cache_store

GRAPE + RAILSУскоряем рельсы

+ отключить неиспользуемые subframeworks + отключить все middleware кроме router + отключить cache_store + установить log_level = :error

GRAPE + RAILSУскоряем рельсы

GRAPE + RAILSОрганизовываем код

/api/v1/…

/app/api/demo/root.rb

/api/v1/…/api/v2/…

/app/api/demo/root.rb

/app/api/demo/version_1/root.rb

/api/v1

/app/api/demo/version_1/big_data.rb

/api/v1/api/v1/big_data

/api/v1/api/v1/big_data

POST /api/v1/big_data

/api/v1/api/v1/big_data

POST /api/v1/big_data

GET /api/v1/big_data

SwaggerДокументация

/app/api/demo/root.rb

/app/api/demo/root.rb

/app/api/demo/root.rb

PUT SWAGGER UI into [project]/public/api/docs

/config/application.rb

RSpecСпецификации

(т.е. тесты)

gem 'rspec-rails'

>rails g rspec:install

https://en.wikipedia.org/wiki/List_of_HTTP_status_codes

- Factory Girl- Девушка с фабрики

+ Fixtures+ Фикстуры

Фоновые задачиBackground jobs

@sseletskyy

Вопросы?THANK YOU