рдЖрдзреБрдирд┐рдХ рд╡реЗрдм рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп, рд╕рд╡рд╛рд▓ рдЕрдХреНрд╕рд░ рдЙрдарддрд╛ рд╣реИ рдХрд┐ рдХрдИ рд╡рд┐рд╖рдо рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреА рдПрдХ рд╕рд░рд▓ рдФрд░ рдкрд╛рд░рджрд░реНрд╢реА рдмрд╛рддрдЪреАрдд рдХреИрд╕реЗ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рдПред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдЪреБрдирд╛рд╡ рд╡рд┐рд╕реНрддреГрдд рд╣реИ: рдпрд╣рд╛рдБ
SOAP ,
CORBA ,
DCE / RPC рд╣реИрдВ , рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ,
REST ред рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдПрдкреАрдЖрдИ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреАред
рдХреНрдпреЛрдВ рдХрд░рддреЗ рд╣реИрдВ?
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХреНрдпреЛрдВ "рдмрдЧреАрдЪреЗ рдХреА рдмрд╛рдбрд╝" рдФрд░ рд╡рд┐рд╖рдо рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдпрджрд┐ рдЖрдк рдПрдХ рдмрд╛рд░ рдПрдХ рдЙрдкрдХрд░рдг рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ - рдпрд╛ рддреЛ рдкрд░реНрд▓ (рдЕрдкрдиреА рдкрд╕рдВрдж рдХреЗ рд▓рд┐рдП рдПрдХ рдврд╛рдВрдЪрд╛) рдпрд╛ рд░реЗрд▓, рдФрд░ рдЙрд╕ рдкрд░ рд╕рдм рдХреБрдЫ рдХрд░реЗрдВ? рдЙрд╕реА рдХрд╛рд░рдг рд╕реЗ рд╣рдо рд╕реНрд▓реЗрдЯреЗрдб рд╕реНрдХреНрд░реВ рдХреЗ рд▓рд┐рдП рд╕реНрд▓реЗрдЯреЗрдб рд╕реНрдХреНрд░реВрдбреНрд░рд╛рдЗрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд▓рд┐рдкреНрд╕ рд╕реНрдХреНрд░реВ рдХреЗ рд▓рд┐рдП рдлрд┐рд▓рд┐рдкреНрд╕ рдкреЗрдЪрдХрд╢, рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдирд╣реАрдВ (рдпрд╣ рд╕рдВрднрд╡ рд╣реИ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд▓реЗрдХрд┐рди рдпрд╣ рдкреНрд░рднрд╛рд╡реА рдирд╣реАрдВ рд╣реИ)ред рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдХрд░рдг рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕реЗрдЯ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рдЕрдиреБрдХреВрд▓ рд╣реИред
рдорд╛рди рд▓реАрдЬрд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╡реЗрдм рд╕реЗрд╡рд╛ рд╣реИ рдЬреЛ рджреВрд░рд╕реНрде рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдПрдЬреЗрдВрдЯреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рдПрдХрддреНрд░ рдХрд░рддреА рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдпрд╣ рдПрдХ рдмреЙрдЯрдиреЗрдЯ рдирд╣реАрдВ рд╣реИ (рдФрд░ рд╡реЗ рдЕрдм рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ), рд▓реЗрдХрд┐рди YouTube рдЬреИрд╕реЗ рдСрдирд▓рд╛рдЗрди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рд╕реЗ рд╡реАрдбрд┐рдпреЛ рд╕рд╛рдордЧреНрд░реА рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдгрд╛рд▓реАред
рдЪреИрдирд▓ рд╣рдореЗрд╢рд╛ рдЕрдЪреНрдЫреЗ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдСрдкрд░реЗрдЯрд░ рдХрднреА-рдХрднреА
рдереНрд░реЙрдЯрд▓рд┐рдВрдЧ рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рддреЗрдЬ рдЧрддрд┐ рд╕реЗ рдирд┐рдпрдорд┐рдд HTTP / FTP рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рддреИрдпрд╛рд░ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "рдПрдЬреЗрдВрдЯреЛрдВ" рдХреЛ рдХрд╛рд░реНрдп рджреЗрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИред
рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐, рд╕рд╛рджрдЧреА рдФрд░ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдореБрдЦреНрдп рд╡реЗрдм рд╕реЗрд╡рд╛ рд░реЗрд▓ рдкрд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдФрд░ рдПрдЬреЗрдВрдЯреЛрдВ рдХреЛ рдмрд╣реБрдд "рдкрддрд▓реА" рднрд╛рд╖рд╛ рдореЗрдВ рдмрдирд╛рддрд╛ рд╣реИ, рдЬреЛ рд▓рдЧрднрдЧ рд╕рднреА рдпреВрдирд┐рдХреНрд╕ рдФрд░ рдХреБрдЫ рд╡рд┐рдВрдбреЛрдЬ рд╕рд░реНрд╡рд░реЛрдВ рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ: рдкрд░реНрд▓ред
рдХреНрдпрд╛ рдХрд░реЗрдВ?
рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рдмреАрдЪ рдПрдкреАрдЖрдИ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдм рдХрдИ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдирд╣реАрдВ рдерд╛, рдФрд░ рдХреНрд▓рд╛рд╕рд┐рдХ SOAP (рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ: XML + HTTP) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ,
рдкрд░реНрд▓ рдФрд░
рд░реЗрд▓ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЙрдкрдХрд░рдг рд╣реИрдВред
рд▓реЗрдХрд┐рди рдЕрдм RESTful API рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдЕрдЪреНрдЫреЗ рдХрд╛рд░рдг рдХреЗ рд▓рд┐рдПред рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдпреЛрдЬрдирд╛, рдкрд░рд┐рднрд╛рд╖рд╛, рдЕрддрд┐рд░рд┐рдХреНрдд рдбрдмреНрд▓реВрдПрд╕рдбреАрдПрд▓ рдлрд╝рд╛рдЗрд▓реЛрдВ рдФрд░ рдЕрдиреНрдп рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕реА
URI рдХреЗ рд╕рдВрдпреЛрдЬрди рдореЗрдВ HTTP рдХрдорд╛рдВрдб (GET, PUT, POST, DELETE) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕рд╛рд░ рд╣реИред рдХрдорд╛рдВрдб рдФрд░ рдпреВрдЖрд░рдЖрдИ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдПрдХ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рдЬрд╛рддреА рд╣реИред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЙрд╕реА HTTP рдкреНрд░рддрд┐рд╕рд╛рдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрддреА рд╣реИред рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг, рд╕рдВрдХреЗрддреЛрдВ рдФрд░ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде,
рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ ред
рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдкрд░реНрд▓ рд╕рд░реНрд╡рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░реЗрдЧрд╛, рдФрд░ рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд░реВрдк рдореЗрдВ рд░реЗрд▓ рдХрд░реЗрдЧрд╛ред
рддреЛ, рдХреНрдпрд╛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде?
рдкрд░реНрд▓ рдкрдХреНрд╖
рдкрд░реНрд▓, рдмрд┐рдирд╛ рдореЙрдбреНрдпреВрд▓ рдХреЗ, рдмрд╣реБрдд рд╕реАрдорд┐рдд рдЙрдкрдХрд░рдг рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЕрдкрдиреА рд╕рднреА рд╢рдХреНрддрд┐ рдФрд░ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ
Mojolicious рдореЙрдбреНрдпреВрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рдЦреБрдж рдХреЛ "рдкрд░реНрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЧрд▓реА рдкреАрдврд╝реА рдХреЗ рд╡реЗрдм рдлреНрд░реЗрдорд╡рд░реНрдХ" рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдерд╛рди рджреЗред
рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЖрдк рдПрдХ RESTful рд╕рд░реНрд╡рд░ рдФрд░ RESTful рдХреНрд▓рд╛рдЗрдВрдЯ рджреЛрдиреЛрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
рд░реЗрд▓ рдХреА рддрд░рдл
рд╣рд╛рд▓ рддрдХ рддрдХ, рд░реЗрд▓ рдореЗрдВ рдерд░реНрдб-рдкрд╛рд░реНрдЯреА рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд╛рде REST рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рддрдВрддреНрд░ рдирд╣реАрдВ рдерд╛, рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдпрд╣ рд╡рд┐рдЪрд╛рд░рдзрд╛рд░рд╛ рд╕рд┐рд░ рд╕реЗ рдкреИрд░ рддрдХ рдХреА рд░реВрдкрд░реЗрдЦрд╛ рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдЗрд╕рд▓рд┐рдП,
рд╡рд┐рднрд┐рдиреНрди GEMs рдХреЛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдлрд▓рддрд╛ рдХреА рдбрд┐рдЧреНрд░реА рдХреЗ рд╕рд╛рде рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдЕрдм рдЖрдк рдмрд┐рд▓реНрдЯ-рдЗрди рд░реЗрд▓ рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН
ActiveResource рд╡рд░реНрдЧ, рдЬреЛ рдЖрдкрдХреЛ
ActiveRecord рдХреЗ рд╕рдорд╛рди рджреВрд░рд╕реНрде рд╕реЗрд╡рд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдХреИрд╕реЗ рдХрд░реЗрдВ?
рдкрд░реНрд▓ рдкрдХреНрд╖
рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд░реНрд▓ рдкрдХреНрд╖ рдкрд░ рдХрдИ рдбрд╛рдЙрдирд▓реЛрдб рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИрдВ, рдФрд░ рд░реЗрд▓ рдХреА рддрд░рдл рд╣рдо рдЙрдирдХреЗ рд╕рд╛рде рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:
- рдмрдирд╛рдиреЗ
- рдкреНрд░рд╛рдкреНрдд
- рдкрд░рд┐рд╡рд░реНрддрди
- рдирд┐рдХрд╛рд▓реЗрдВ
Mojolicious рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
, рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ RESTful рд╡реЗрдм рд╕реЗрд╡рд╛ рдмрдирд╛рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ:
рд╣рдо рд╕реЗрд╡рд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдкреЛрд░реНрдЯ
3001 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдорд╛рдирдХ 3000 рдЖрдкрдХреЗ рд░реЗрд▓ рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ:
./restful-server.pl daemon --listen=http://*:3001
рд░реЗрд▓ рдХреА рддрд░рдл
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдорд╛рд░реЗ RESTful рдкрд░реНрд▓ рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде
ActiveResource рд╡рд░реНрдЧ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рд░реЗрд▓ рдХрдо рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред
рд╡рд╛рдВрдЫрд┐рдд рд╡рд░реНрдЧ рдмрдирд╛рдПрдВ:
class Download < ActiveResource::Base
рдЕрдм рд╣рдо рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде рд░реЗрд▓ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдХреНрд░рд┐рдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рднреА рдСрдмреНрдЬреЗрдХреНрдЯ рдЦреЛрдЬреЗрдВ:
> Download.find(:all) => [#<Download:0x00000004b77060 @attributes={"name"=>"Video 0", "id"=>"0", "size"=>7654400, "uri"=>"http://site.com/download_0"}, @prefix_options={}, @persisted=true>, #<Download:0x0000000446f740 @attributes={"name"=>"Video 1", "id"=>"1", "size"=>8672256, "uri"=>"http://site.com/download_1"}, @prefix_options={}, @persisted=true>, #<Download:0x0000000446d300 @attributes={"name"=>"Video 2", "id"=>"2", "size"=>5931008, "uri"=>"http://site.com/download_2"}, @prefix_options={}, @persisted=true>, #<Download:0x0000000446c888 @attributes={"name"=>"Video 3", "id"=>"3", "size"=>2273280, "uri"=>"http://site.com/download_3"}, @prefix_options={}, @persisted=true>, #<Download:0x000000045c7c50 @attributes={"name"=>"Video 4", "id"=>"4", "size"=>8466432, "uri"=>"http://site.com/download_4"}, @prefix_options={}, @persisted=true>, #<Download:0x000000045c6ee0 @attributes={"name"=>"Video 5", "id"=>"5", "size"=>7057408, "uri"=>"http://site.com/download_5"}, @prefix_options={}, @persisted=true>, #<Download:0x000000045c5d60 @attributes={"name"=>"Video 6", "id"=>"6", "size"=>2351104, "uri"=>"http://site.com/download_6"}, @prefix_options={}, @persisted=true>, #<Download:0x00000004116058 @attributes={"name"=>"Video 7", "id"=>"7", "size"=>5640192, "uri"=>"http://site.com/download_7"}, @prefix_options={}, @persisted=true>, #<Download:0x00000004114320 @attributes={"name"=>"Video 8", "id"=>"8", "size"=>9701376, "uri"=>"http://site.com/download_8"}, @prefix_options={}, @persisted=true>, #<Download:0x0000000411b080 @attributes={"name"=>"Video 9", "id"=>"9", "size"=>9717760, "uri"=>"http://site.com/download_9"}, @prefix_options={}, @persisted=true>, #<Download:0x00000004a46330 @attributes={"name"=>"Video 10", "id"=>"10", "size"=>6734848, "uri"=>"http://site.com/download_10"}, @prefix_options={}, @persisted=true>]
рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд╕реНрддреБ рдХреА рдЦреЛрдЬ рдХрд░реЗрдВ:
> Download.find(5) => #<Download:0x00000004aa5420 @attributes={"name"=>"Video 5", "id"=>"5", "size"=>7057408, "uri"=>"http://site.com/download_5"}, @prefix_options={}, @persisted=true>
рдПрдХ рдЕрд╡рд┐рд╡реЗрдХреА рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП рдЦреЛрдЬреЗрдВред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐
рдХреИрд╕реЗ_ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛_рдлрд╛рдЙрдВрдб рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
> Download.find(100) ActiveResource::ResourceNotFound: Failed. Response code = 404. Response message = Not Found.
рд╡рд╕реНрддреБ рдирд┐рд░реНрдорд╛рдг:
> download = Download.new => #<Download:0x00000004802380 @attributes={}, @prefix_options={}, @persisted=false> > download.name = "New Video" => "New Video" > download.uri = "http://site.com/video.mp4" => "http://site.com/video.mp4" > download.size = 23452363 => 23452363 > download.save => true > Download.last => #<Download:0x000000049408f0 @attributes={"name"=>"New Video", "id"=>11, "size"=>23452363, "uri"=>"http://site.com/video.mp4"}, @prefix_options={}, @persisted=true>
рд╡рд╕реНрддреБ рдкрд░рд┐рд╡рд░реНрддрди:
> download = Download.find(5) => #<Download:0x0000000473ee30 @attributes={"name"=>"Video 5", "id"=>"5", "size"=>7057408, "uri"=>"http://site.com/download_5"}, @prefix_options={}, @persisted=true> > download.name = "New Video 5" => "New Video 5" > download.save => true > Download.find(5) => #<Download:0x000000043dade8 @attributes={"name"=>"New Video 5", "id"=>"5", "size"=>7057408, "uri"=>"http://site.com/download_5"}, @prefix_options={}, @persisted=true>
рдСрдмреНрдЬреЗрдХреНрдЯ рд╣рдЯрд╛рдПрдВ:
> Download.find(5).destroy => #<Net::HTTPOK 200 OK readbody=true> > Download.find(5) ActiveResource::ResourceNotFound: Failed. Response code = 404. Response message = Not Found.
рдПрдХ рдЧреИрд░-рдорд╛рдирдХ рд╕рдорд╛рд░реЛрд╣ рдХрд╛ рдЖрд╣реНрд╡рд╛рди:
> Download.find(1).post(:start) => #<Net::HTTPOK 200 OK readbody=true>
рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реИ?
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджрд┐рд╢рд╛рдУрдВ рдореЗрдВ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
- ActiveResource рдореЗрдВ рдПрдХ рдХрдареЛрд░ рдбреЗрдЯрд╛ рдореЙрдбрд▓ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рд╕реНрдХреАрдорд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдИрдбреА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдорд╛рди рдХреЗ рдореИрдиреБрдЕрд▓ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреЛ рдмрд╛рд╣рд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред
- рдореЛрдЬреЛ :: UserAgent рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдкреНрд░рддрд┐рд╖реНрдард┐рдд рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░реНрд▓
- рдкреНрд░рдорд╛рдгреАрдХрд░рдг / рдкреНрд░рд╛рдзрд┐рдХрд░рдг
рдкреНрд░рдпреБрдХреНрдд рд╕рдВрд╕реНрдХрд░рдг
- CentOS Linux 6.2
- рдкрд░реНрд▓ 5.10.1
- рдордЭреМрд▓реА 2.97
- рд░реВрдмреА 1.9.3p125
- рд░реЗрд▓рдЧрд╛рдбрд╝реА рей.реи.рез