Slide 1

Slide 1 text

HOW A REQUEST BECOMES A RESPONSE BY AIMEE SIMONE & CHRISTOPHER GREEN 1 Tuesday, May 7, 13

Slide 2

Slide 2 text

railsconftutorials.com/ sessions/ request_response.html 2 Tuesday, May 7, 13

Slide 3

Slide 3 text

BROWSER WEB SERVER APP SERVER ROUTER CONTROLLER MODEL VIEW RAILS 3 Tuesday, May 7, 13

Slide 4

Slide 4 text

4 Tuesday, May 7, 13

Slide 5

Slide 5 text

::WHAT IS A REQUEST?:: 4 Tuesday, May 7, 13

Slide 6

Slide 6 text

A REQUEST 5 Tuesday, May 7, 13

Slide 7

Slide 7 text

is a set of instructions that tells a server what kind of response we want A REQUEST 5 Tuesday, May 7, 13

Slide 8

Slide 8 text

6 Tuesday, May 7, 13

Slide 9

Slide 9 text

CODESCHOOL.COM/COURSES 6 Tuesday, May 7, 13

Slide 10

Slide 10 text

REQUEST PATH 7 Tuesday, May 7, 13

Slide 11

Slide 11 text

REQUEST PATH 8 Tuesday, May 7, 13

Slide 12

Slide 12 text

REQUEST PATH /courses 8 Tuesday, May 7, 13

Slide 13

Slide 13 text

REQUEST VERB 9 Tuesday, May 7, 13

Slide 14

Slide 14 text

REQUEST VERB 10 Tuesday, May 7, 13

Slide 15

Slide 15 text

REQUEST VERB GET 10 Tuesday, May 7, 13

Slide 16

Slide 16 text

REQUEST VERB GET 11 Tuesday, May 7, 13

Slide 17

Slide 17 text

REQUEST VERB GET POST PUT DELETE 11 Tuesday, May 7, 13

Slide 18

Slide 18 text

QUERY DATA 12 Tuesday, May 7, 13

Slide 19

Slide 19 text

QUERY DATA 13 Tuesday, May 7, 13

Slide 20

Slide 20 text

QUERY DATA /courses?page=2 13 Tuesday, May 7, 13

Slide 21

Slide 21 text

14 Tuesday, May 7, 13

Slide 22

Slide 22 text

HEADER DATA 14 Tuesday, May 7, 13

Slide 23

Slide 23 text

HEADER DATA 15 Tuesday, May 7, 13

Slide 24

Slide 24 text

16 Tuesday, May 7, 13

Slide 25

Slide 25 text

::BROWSER TO WEB SERVER:: 16 Tuesday, May 7, 13

Slide 26

Slide 26 text

17 Tuesday, May 7, 13

Slide 27

Slide 27 text

CODESCHOOL.COM/COURSES 17 Tuesday, May 7, 13

Slide 28

Slide 28 text

CODESCHOOL.COM/COURSES 18 Tuesday, May 7, 13

Slide 29

Slide 29 text

BROWSER WEB SERVER APP SERVER ROUTER CONTROLLER MODEL VIEW RAILS 19 Tuesday, May 7, 13

Slide 30

Slide 30 text

BROWSER WEB SERVER APP SERVER ROUTER CONTROLLER MODEL VIEW RAILS REQUEST MADE: GET http://codeschool.com/courses 19 Tuesday, May 7, 13

Slide 31

Slide 31 text

20 Tuesday, May 7, 13

Slide 32

Slide 32 text

WHAT IS A WEB SERVER? 20 Tuesday, May 7, 13

Slide 33

Slide 33 text

A WEB SERVER 21 Tuesday, May 7, 13

Slide 34

Slide 34 text

delivers web pages on the request of clients using HTTP A WEB SERVER 21 Tuesday, May 7, 13

Slide 35

Slide 35 text

A WEB SERVER 21 Tuesday, May 7, 13

Slide 36

Slide 36 text

A WEB SERVER 22 Tuesday, May 7, 13

Slide 37

Slide 37 text

nginx A WEB SERVER 22 Tuesday, May 7, 13

Slide 38

Slide 38 text

A WEB SERVER 22 Tuesday, May 7, 13

Slide 39

Slide 39 text

A WEB SERVER 23 Tuesday, May 7, 13

Slide 40

Slide 40 text

apache A WEB SERVER 23 Tuesday, May 7, 13

Slide 41

Slide 41 text

A WEB SERVER 23 Tuesday, May 7, 13

Slide 42

Slide 42 text

A WEB SERVER 24 Tuesday, May 7, 13

Slide 43

Slide 43 text

webrick A WEB SERVER 24 Tuesday, May 7, 13

Slide 44

Slide 44 text

A WEB SERVER 24 Tuesday, May 7, 13

Slide 45

Slide 45 text

25 Tuesday, May 7, 13

Slide 46

Slide 46 text

::WEB SERVER TO APP SERVER:: 25 Tuesday, May 7, 13

Slide 47

Slide 47 text

BROWSER WEB SERVER APP SERVER ROUTER CONTROLLER MODEL VIEW RAILS REQUEST MADE: GET http://codeschool.com/courses 26 Tuesday, May 7, 13

Slide 48

Slide 48 text

BROWSER WEB SERVER APP SERVER ROUTER CONTROLLER MODEL VIEW RAILS REQUEST MADE: GET http://codeschool.com/courses REQUEST ACCEPTED, PASSED TO APPLICATION SERVER 26 Tuesday, May 7, 13

Slide 49

Slide 49 text

27 Tuesday, May 7, 13

Slide 50

Slide 50 text

WHAT IS AN APP SERVER? 27 Tuesday, May 7, 13

Slide 51

Slide 51 text

AN APP SERVER 28 Tuesday, May 7, 13

Slide 52

Slide 52 text

handles execution of procedures (programs, routines, scripts) for an application AN APP SERVER 28 Tuesday, May 7, 13

Slide 53

Slide 53 text

AN APP SERVER 28 Tuesday, May 7, 13

Slide 54

Slide 54 text

AN APP SERVER 29 Tuesday, May 7, 13

Slide 55

Slide 55 text

passenger AN APP SERVER 29 Tuesday, May 7, 13

Slide 56

Slide 56 text

AN APP SERVER 29 Tuesday, May 7, 13

Slide 57

Slide 57 text

AN APP SERVER 30 Tuesday, May 7, 13

Slide 58

Slide 58 text

thin AN APP SERVER 30 Tuesday, May 7, 13

Slide 59

Slide 59 text

AN APP SERVER 30 Tuesday, May 7, 13

Slide 60

Slide 60 text

AN APP SERVER 31 Tuesday, May 7, 13

Slide 61

Slide 61 text

mongrel AN APP SERVER 31 Tuesday, May 7, 13

Slide 62

Slide 62 text

AN APP SERVER 31 Tuesday, May 7, 13

Slide 63

Slide 63 text

32 Tuesday, May 7, 13

Slide 64

Slide 64 text

::RAILS:: 32 Tuesday, May 7, 13

Slide 65

Slide 65 text

BROWSER WEB SERVER APP SERVER ROUTER CONTROLLER MODEL VIEW RAILS REQUEST MADE: GET http://codeschool.com/courses 33 Tuesday, May 7, 13

Slide 66

Slide 66 text

BROWSER WEB SERVER APP SERVER ROUTER CONTROLLER MODEL VIEW RAILS REQUEST MADE: GET http://codeschool.com/courses REQUEST ACCEPTED, PASSED TO APPLICATION SERVER 33 Tuesday, May 7, 13

Slide 67

Slide 67 text

BROWSER WEB SERVER APP SERVER ROUTER CONTROLLER MODEL VIEW RAILS REQUEST MADE: GET http://codeschool.com/courses REQUEST ACCEPTED, PASSED TO APPLICATION SERVER REQUEST IS PASSED TO RAILS 33 Tuesday, May 7, 13

Slide 68

Slide 68 text

34 Tuesday, May 7, 13

Slide 69

Slide 69 text

ROUTER CONTROLLER MODEL VIEW RAILS 34 Tuesday, May 7, 13

Slide 70

Slide 70 text

ROUTER GET http://codeschool.com/courses OUR REQUEST: 35 Tuesday, May 7, 13

Slide 71

Slide 71 text

ROUTER GET http://codeschool.com/courses OUR REQUEST: config/routes.rb resources :courses, only: [:index, :show] do get :goto, on: :member get :enroll, on: :member post :remind_me, on: :member put :notify, on: :member get :suggest, on: :collection resources :reviews, only: [:index, :new, :create, :edit, :update] end 35 Tuesday, May 7, 13

Slide 72

Slide 72 text

ROUTER GET http://codeschool.com/courses OUR REQUEST: config/routes.rb resources :courses, only: [:index, :show] do get :goto, on: :member get :enroll, on: :member post :remind_me, on: :member put :notify, on: :member get :suggest, on: :collection resources :reviews, only: [:index, :new, :create, :edit, :update] end goto_course GET /courses/:id/goto(.:format) {:action=>"goto", :controller=>"courses"} enroll_course GET /courses/:id/enroll(.:format) {:action=>"enroll", :controller=>"courses"} remind_me_course POST /courses/:id/remind_me(.:format) {:action=>"remind_me", :controller=>"courses"} notify_course PUT /courses/:id/notify(.:format) {:action=>"notify", :controller=>"courses"} suggest_courses GET /courses/suggest(.:format) {:action=>"suggest", :controller=>"courses"} course_reviews GET /courses/:course_id/reviews(.:format) {:action=>"index", :controller=>"reviews"} POST /courses/:course_id/reviews(.:format) {:action=>"create", :controller=>"reviews"} new_course_review GET /courses/:course_id/reviews/new(.:format) {:action=>"new", :controller=>"reviews"} edit_course_review GET /courses/:course_id/reviews/:id/edit(.:format) {:action=>"edit", :controller=>"reviews"} course_review PUT /courses/:course_id/reviews/:id(.:format) {:action=>"update", :controller=>"reviews"} courses GET /courses(.:format) {:action=>"index", :controller=>"courses"} course GET /courses/:id(.:format) {:action=>"show", :controller=>"courses"} $ rake routes 35 Tuesday, May 7, 13

Slide 73

Slide 73 text

ROUTER GET http://codeschool.com/courses OUR REQUEST: 36 Tuesday, May 7, 13

Slide 74

Slide 74 text

ROUTER GET http://codeschool.com/courses OUR REQUEST: goto_course GET /courses/:id/goto(.:format) {:action=>"goto", :controller=>"courses"} enroll_course GET /courses/:id/enroll(.:format) {:action=>"enroll", :controller=>"courses"} remind_me_course POST /courses/:id/remind_me(.:format) {:action=>"remind_me", :controller=>"courses"} notify_course PUT /courses/:id/notify(.:format) {:action=>"notify", :controller=>"courses"} suggest_courses GET /courses/suggest(.:format) {:action=>"suggest", :controller=>"courses"} course_reviews GET /courses/:course_id/reviews(.:format) {:action=>"index", :controller=>"reviews"} POST /courses/:course_id/reviews(.:format) {:action=>"create", :controller=>"reviews"} new_course_review GET /courses/:course_id/reviews/new(.:format) {:action=>"new", :controller=>"reviews"} course_review PUT /courses/:course_id/reviews/:id(.:format) {:action=>"update", :controller=>"reviews"} courses GET /courses(.:format) {:action=>"index", :controller=>"courses"} course GET /courses/:id(.:format) {:action=>"show", :controller=>"courses"} 36 Tuesday, May 7, 13

Slide 75

Slide 75 text

ROUTER GET http://codeschool.com/courses OUR REQUEST: 36 Tuesday, May 7, 13

Slide 76

Slide 76 text

ROUTER GET http://codeschool.com/courses OUR REQUEST: GET /courses CONTROLLER: “courses” ACTION: “index” CONTROLLER AND ACTION CHOSEN 36 Tuesday, May 7, 13

Slide 77

Slide 77 text

ROUTER GET http://codeschool.com/courses OUR REQUEST: 37 Tuesday, May 7, 13

Slide 78

Slide 78 text

ROUTER GET http://codeschool.com/courses OUR REQUEST: course_review PUT /courses/:course_id/reviews/:id(.:format) {:action=>"update", :controller=>"reviews"} courses GET /courses(.:format) {:action=>"index", :controller=>"courses"} course GET /courses/:id(.:format) {:action=>"show", :controller=>"courses"} 37 Tuesday, May 7, 13

Slide 79

Slide 79 text

ROUTER GET http://codeschool.com/courses OUR REQUEST: GET /courses CONTROLLER: “courses” ACTION: “index” course_review PUT /courses/:course_id/reviews/:id(.:format) {:action=>"update", :controller=>"reviews"} courses GET /courses(.:format) {:action=>"index", :controller=>"courses"} course GET /courses/:id(.:format) {:action=>"show", :controller=>"courses"} CONTROLLER AND ACTION CHOSEN 37 Tuesday, May 7, 13

Slide 80

Slide 80 text

create show index update Action Action Action Action MODEL VIEW CONTROLLER: “courses” GET /courses ACTION: “index” CONTROLLER 38 Tuesday, May 7, 13

Slide 81

Slide 81 text

create show index update Action Action Action MODEL VIEW CONTROLLER: “courses” GET /courses ACTION: “index” CONTROLLER 38 Tuesday, May 7, 13

Slide 82

Slide 82 text

create show index update Action Action MODEL VIEW CONTROLLER: “courses” GET /courses ACTION: “index” CONTROLLER 38 Tuesday, May 7, 13

Slide 83

Slide 83 text

create show index update Action MODEL VIEW CONTROLLER: “courses” GET /courses ACTION: “index” CONTROLLER 38 Tuesday, May 7, 13

Slide 84

Slide 84 text

create show index update MODEL VIEW CONTROLLER: “courses” GET /courses ACTION: “index” CONTROLLER CoursesController 38 Tuesday, May 7, 13

Slide 85

Slide 85 text

create show update CoursesController index MODEL VIEW CONTROLLER: “courses” GET /courses ACTION: “index” CONTROLLER 39 Tuesday, May 7, 13

Slide 86

Slide 86 text

create show update CoursesController index MODEL VIEW CONTROLLER: “courses” GET /courses ACTION: “index” CONTROLLER 39 Tuesday, May 7, 13

Slide 87

Slide 87 text

class CoursesController < ApplicationController respond_to :html, :json def index @courses = Course.order(:position).all @paths = Path.all @elective = @paths.pop respond_with end end CONTROLLER: “courses” GET /courses ACTION: “index” CONTROLLER 40 Tuesday, May 7, 13

Slide 88

Slide 88 text

class CoursesController < ApplicationController respond_to :html, :json def index @courses = Course.order(:position).all @paths = Path.all @elective = @paths.pop respond_with end end app/controllers/courses_controller.rb CONTROLLER: “courses” GET /courses ACTION: “index” CONTROLLER 40 Tuesday, May 7, 13

Slide 89

Slide 89 text

CoursesController MODEL VIEW index @courses = Course.order(:position).all MODEL 41 Tuesday, May 7, 13

Slide 90

Slide 90 text

CoursesController MODEL VIEW index @courses = Course.order(:position).all MODEL 41 Tuesday, May 7, 13

Slide 91

Slide 91 text

MODEL @courses = Course.order(:position).all @paths = Path.all MODEL CoursesController index Course MODEL Path MODEL MODEL 42 Tuesday, May 7, 13

Slide 92

Slide 92 text

MODEL @courses = Course.order(:position).all @paths = Path.all MODEL CoursesController index Course MODEL Path MODEL ActiveRecord ActiveRecord MODEL 42 Tuesday, May 7, 13

Slide 93

Slide 93 text

MODEL @courses = Course.order(:position).all @paths = Path.all MODEL CoursesController index Course MODEL Path MODEL ActiveRecord ActiveRecord DATABASE courses Table paths Table MODEL 42 Tuesday, May 7, 13

Slide 94

Slide 94 text

BROWSER WEB SERVER APP SERVER ROUTER CONTROLLER MODEL VIEW RAILS 43 Tuesday, May 7, 13

Slide 95

Slide 95 text

BROWSER WEB SERVER APP SERVER ROUTER CONTROLLER MODEL VIEW RAILS REQUEST MADE: GET http://codeschool.com/courses 43 Tuesday, May 7, 13

Slide 96

Slide 96 text

BROWSER WEB SERVER APP SERVER ROUTER CONTROLLER MODEL VIEW RAILS REQUEST MADE: GET http://codeschool.com/courses REQUEST ACCEPTED, PASSED TO APPLICATION SERVER 43 Tuesday, May 7, 13

Slide 97

Slide 97 text

BROWSER WEB SERVER APP SERVER ROUTER CONTROLLER MODEL VIEW RAILS REQUEST MADE: GET http://codeschool.com/courses REQUEST ACCEPTED, PASSED TO APPLICATION SERVER APPLICATION SERVER GIVES REQUEST TO MIDDLEWARE, RAILS IS STARTED, GETS REQUEST. 43 Tuesday, May 7, 13

Slide 98

Slide 98 text

BROWSER WEB SERVER APP SERVER ROUTER CONTROLLER MODEL VIEW RAILS REQUEST MADE: GET http://codeschool.com/courses REQUEST ACCEPTED, PASSED TO APPLICATION SERVER APPLICATION SERVER GIVES REQUEST TO MIDDLEWARE, RAILS IS STARTED, GETS REQUEST. REQUEST PATH AND METHOD MAPPED TO CONTROLLER AND ACTION 43 Tuesday, May 7, 13

Slide 99

Slide 99 text

BROWSER WEB SERVER APP SERVER ROUTER CONTROLLER MODEL VIEW RAILS REQUEST MADE: GET http://codeschool.com/courses REQUEST ACCEPTED, PASSED TO APPLICATION SERVER APPLICATION SERVER GIVES REQUEST TO MIDDLEWARE, RAILS IS STARTED, GETS REQUEST. REQUEST PATH AND METHOD MAPPED TO CONTROLLER AND ACTION CONTROLLER ACTION GATHERS INFORMATION FROM MODELS TO SUPPLY TO VIEW 43 Tuesday, May 7, 13

Slide 100

Slide 100 text

CoursesController index VIEW VIEW 44 Tuesday, May 7, 13

Slide 101

Slide 101 text

CoursesController index VIEW VIEW 44 Tuesday, May 7, 13

Slide 102

Slide 102 text

CoursesController index VIEW 45 Tuesday, May 7, 13

Slide 103

Slide 103 text

CoursesController index VIEW app/views/courses/index.html.haml VIEW 45 Tuesday, May 7, 13

Slide 104

Slide 104 text

CoursesController index VIEW app/views/courses/index.html.haml View template creates HTML for response. VIEW 45 Tuesday, May 7, 13

Slide 105

Slide 105 text

HTTP RESPONSE 46 Tuesday, May 7, 13

Slide 106

Slide 106 text

HTTP RESPONSE HEADERS Content-Type:text/html; charset=utf-8 46 Tuesday, May 7, 13

Slide 107

Slide 107 text

HTTP RESPONSE HEADERS Content-Type:text/html; charset=utf-8 Accept:text/html REQUEST HEADER 46 Tuesday, May 7, 13

Slide 108

Slide 108 text

HTTP RESPONSE HEADERS Content-Type:text/html; charset=utf-8 Accept:text/html REQUEST HEADER Content-Encoding:gzip Accept-Encoding:gzip,deflate 46 Tuesday, May 7, 13

Slide 109

Slide 109 text

HTTP RESPONSE HEADERS Content-Type:text/html; charset=utf-8 Accept:text/html REQUEST HEADER Content-Encoding:gzip Accept-Encoding:gzip,deflate STATUS 200 OK === GOOD! 1xx: Informational - Request received, continuing process 2xx: Success - The action was successfully received, understood, and accepted 3xx: Redirection - Further action must be taken in order to complete the request 4xx: Client Error - The request contains bad syntax or cannot be fulfilled 5xx: Server Error - The server failed to fulfill an apparently valid request 46 Tuesday, May 7, 13

Slide 110

Slide 110 text

HTTP RESPONSE HEADERS Content-Type:text/html; charset=utf-8 Accept:text/html REQUEST HEADER Content-Encoding:gzip Accept-Encoding:gzip,deflate STATUS 200 OK === GOOD! 1xx: Informational - Request received, continuing process 2xx: Success - The action was successfully received, understood, and accepted 3xx: Redirection - Further action must be taken in order to complete the request 4xx: Client Error - The request contains bad syntax or cannot be fulfilled 5xx: Server Error - The server failed to fulfill an apparently valid request BODY HTML JSON XML FILE CONTENTS - Image, Video, Compressed file. Set-Cookie: key=value; path=/; 46 Tuesday, May 7, 13

Slide 111

Slide 111 text

BROWSER WEB SERVER APP SERVER ROUTER CONTROLLER MODEL VIEW RAILS REQUEST MADE: GET http://codeschool.com/courses APPLICATION SERVER GIVES REQUEST TO MIDDLEWARE, RAILS IS STARTED, GETS REQUEST. REQUEST PATH AND METHOD MAPPED TO CONTROLLER AND ACTION CONTROLLER ACTION GATHERS INFORMATION FROM MODELS, SUPPLIES INFORMATION TO VIEW CREATING HTML REQUEST ACCEPTED, PASSED TO APPLICATION SERVER 47 Tuesday, May 7, 13

Slide 112

Slide 112 text

BROWSER WEB SERVER APP SERVER ROUTER CONTROLLER MODEL VIEW RAILS 47 Tuesday, May 7, 13

Slide 113

Slide 113 text

BROWSER WEB SERVER APP SERVER ROUTER CONTROLLER MODEL VIEW RAILS 48 Tuesday, May 7, 13

Slide 114

Slide 114 text

BROWSER WEB SERVER APP SERVER ROUTER CONTROLLER MODEL VIEW RAILS VIEW WRITES HTML TO RESPONSE BODY 48 Tuesday, May 7, 13

Slide 115

Slide 115 text

BROWSER WEB SERVER APP SERVER ROUTER CONTROLLER MODEL VIEW RAILS 49 Tuesday, May 7, 13

Slide 116

Slide 116 text

BROWSER WEB SERVER APP SERVER ROUTER CONTROLLER MODEL VIEW RAILS VIEW WRITES HTML TO RESPONSE BODY 49 Tuesday, May 7, 13

Slide 117

Slide 117 text

BROWSER WEB SERVER APP SERVER ROUTER CONTROLLER MODEL VIEW RAILS VIEW WRITES HTML TO RESPONSE BODY RESPONSE RETURNED TO BROWSER 49 Tuesday, May 7, 13

Slide 118

Slide 118 text

BROWSER WEB SERVER APP SERVER ROUTER CONTROLLER MODEL VIEW RAILS VIEW WRITES HTML TO RESPONSE BODY RESPONSE RETURNED TO BROWSER RESPONSE RECEIVED! 49 Tuesday, May 7, 13

Slide 119

Slide 119 text

BROWSER WEB SERVER APP SERVER ROUTER CONTROLLER MODEL VIEW RAILS VIEW WRITES HTML TO RESPONSE BODY RESPONSE RETURNED TO BROWSER RESPONSE RECEIVED! RESPONSE TRAVELS BACK THROUGH MIDDLEWARE STACK 49 Tuesday, May 7, 13

Slide 120

Slide 120 text

RESPONSE 50 Tuesday, May 7, 13

Slide 121

Slide 121 text

RESPONSE 50 Tuesday, May 7, 13

Slide 122

Slide 122 text

51 Tuesday, May 7, 13

Slide 123

Slide 123 text

QUESTIONS? 51 Tuesday, May 7, 13

Slide 124

Slide 124 text

THANK YOU! Christopher Green @tastyfishes https://github.com/chrisgre Aimee Simone @aimee_simone github.com/aimeesimone 52 Tuesday, May 7, 13