рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ,
рдПрдВрдЧреБрд▓рд░ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рдХреЛрдб рдФрд░ рд╕рд░реНрд╡рд░ рдПрдкреАрдЖрдИ рдХреЗ рдмреАрдЪ рдЕрдореВрд░реНрддрддрд╛ рдХреЗ рд╕реНрддрд░ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП $ рд╕рдВрд╕рд╛рдзрди рдХрд╛ рдПрдХ рд╡рд░реНрдЧ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ ред рдЗрд╕рд▓рд┐рдП, рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ CRUD рдСрдкрд░реЗрд╢рди рдХрд░рдирд╛ рдЕрдм рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИред рд▓реЗрдХрд┐рди рддрдм рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЖрдкрдХреЛ рдПрдХ рдорд╛рдирдХ рд╕рдВрд╕рд╛рдзрди рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рдорд╛рдирдХ CRUD рд╡рд┐рдзрд┐рдпреЛрдВ (рдпрд╛рдиреА, рдкрдврд╝реЗрдВ, рдЕрдкрдбреЗрдЯ, рдбрд┐рд▓реАрдЯ) рд╕реЗ рдкрд░реЗ рдЬрд╛рддреА рд╣реИ? рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдХреЛрдгреАрдп RESTful рдХреЗ рд╕рд╛рде рдХрд╛рдлреА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ "рдирд┐рдпрдВрддреНрд░рдХреЛрдВред"
рдорд╛рд░реНрдХ рдореИрд╕реЗрдЯ рдХреЗ рд░реАрд╕реНрдЯ рдПрдкреАрдЖрдИ рдХреЛрдб рдХреЗ рдЕрдиреБрд╕рд╛рд░ , рдЪрд╛рд░ рд╕рдВрд╕рд╛рдзрди рдЖрд░реНрдХрдЯрд┐рдХ рд╣реИрдВ:
- рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдПрдХ рд╕рдВрд╕рд╛рдзрди рдХрд╛ рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╣реИред
- рд╕рдВрдЧреНрд░рд╣ - рд╕рд░реНрд╡рд░ рдкрд░ рдПрдХ рдбреЗрдЯрд╛ рд╕реЗрдЯред
- рднрдВрдбрд╛рд░рдг рдПрдХ рдЧреНрд░рд╛рд╣рдХ рдкрд░ рдПрдХ рдбрд╛рдЯрд╛рд╕реЗрдЯ рд╣реИред
- рдирд┐рдпрдВрддреНрд░рдХ рдХреНрд░рд┐рдпрд╛ рд╣реИред
рджрд╕реНрддрд╛рд╡реЗрдЬрд╝, рд╕рдВрдЧреНрд░рд╣ рдФрд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВред рджреВрд╕рд░реА рдУрд░, рдирд┐рдпрдВрддреНрд░рдХ, рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИрдВред рдЖрдк рдХрд┐рд╕реА рд╕рдВрд╕рд╛рдзрди рдкрд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП HTTP рдореЗрдВ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рд╛рдзрд╛рд░рдг CRUD рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╣рдореЗрд╢рд╛ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрд╕рд╛рдзрди рд▓реЗрдВ:
- / рд╕рдВрджреЗрд╢
- / рд╕рдВрджреЗрд╢ / рек
рдПрдХ рд╕рдВрджреЗрд╢ рд╕рдВрдЧреНрд░рд╣ (рдкрд╣рд▓рд╛ рд╕рдВрд╕рд╛рдзрди) рдФрд░ рдПрдХ рдЕрд▓рдЧ рд╕рдВрджреЗрд╢ (рджреВрд╕рд░рд╛ рд╕рдВрд╕рд╛рдзрди) рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВ рд╕рднреА рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░рдиреЗ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХреИрд╕реЗ рдХрд░реВрдБ? рдпрд╛ рдЗрд╕ рд╕рдВрджреЗрд╢ рдХреЛ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдХреИрд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП? CRUD рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЗрди рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдирд┐рдпрдВрддреНрд░рдХ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдорд╣рд╛рди рд╣реИрдВ:
- / рд╕рдВрджреЗрд╢ / рд╕реНрдкрд╖реНрдЯ-рд╕рднреА
- / рд╕рдВрджреЗрд╢ / 4 / рд╕рдВрдЧреНрд░рд╣
рдпрд╣рд╛рдВ рд╣рдо рд╕рдВрдЧреНрд░рд╣ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рдХреНрд░рдорд╢рдГ рд╕рдВрдЧреНрд░рд╣ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ-рд╕рднреА рдФрд░ рд╕рдВрдЧреНрд░рд╣ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдЕрдкрдиреЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдирд╛, рд╣рдо URL рд╕реНрдХреАрдо рдореЗрдВ рдЖрдП, рдЬрд┐рд╕рдореЗрдВ рдмрд╣реБрдд рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓рддрд╛ рд╣реИред рдХреЛрдгреАрдп рдХрд╛ $ рд╕рдВрд╕рд╛рдзрди рдЖрдкрдХреЛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдбреЗрдЯрд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ "рд╕реНрдорд╛рд░реНрдЯ" рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЙрдкрд░реЛрдХреНрдд рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдХреЛрдгреАрдп рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рд╕рдВрд╕рд╛рдзрди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
- / рд╕рдВрджреЗрд╢ /: рдЖрдИрдбреА /: рдирд┐рдпрдВрддреНрд░рдХ
рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐, рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдкрд╣рд▓реЗ URL рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреБрдЫ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рд╣реИред рдХреНрдпрд╛ ": рдЖрдИрдбреА" рдПрдХ рд╕рдВрдЧреНрд░рд╣-рдЖрдзрд╛рд░рд┐рдд рдирд┐рдпрдВрддреНрд░рдХ рдХрд╛ рд╕рдВрджрд░реНрдн рд╣реИ? рдпрд╛ рдпрд╣ рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЖрдИрдбреА рд▓рд┐рдВрдХ рд╣реИ?
рдЗрд╕ рдЕрдирд┐рд╢реНрдЪрд┐рддрддрд╛ рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЛрдгреАрдп рдЖрдкрдХреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ URL рдХреЗ рдПрдХ рд╣реА рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рдХрдИ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
- / рд╕рдВрджреЗрд╢ /: рд╕реВрдЪреА рдирд┐рдпрдВрддреНрд░рдХ: рдЖрдИрдбреА /: docController
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ URL рдкреИрдЯрд░реНрди рдХреЗ рджреВрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ рджреЛ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ:
- : рд╕реВрдЪреА-рдирд┐рдпрдВрддреНрд░рдХ
- : рдЖрдИрдбреА
рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдореИрдВ рдЙрдирдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдЬрдмрдХрд┐ рдХреЛрдгреАрдп рдареАрдХ рд╕реЗ RESTful рд╕рдВрд╕рд╛рдзрди рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдЧрд╛ред рдЗрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рдбреЗрдореЛ рд▓рд┐рдЦрд╛ рдЬрд┐рд╕рдореЗрдВ рд╕рдВрджреЗрд╢ рд╕рдВрд╕рд╛рдзрди рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
<!doctype html> <html ng-app="Demo"> <head> <meta charset="utf-8" /> <title> RESTful AngularJS</title> <script type="text/javascript" src="../angular-1.0.2/angular.js"></script> <script type="text/javascript" src="../angular-1.0.2/angular-resource.js"></script> <script type="text/javascript"> </script> </head> <body> </body> </html>
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореЗрд░рд╛ рдХреЛрдгреАрдп рд╕рдВрд╕рд╛рдзрди рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рджреЗрдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ:
- : ListController - рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдкрд░ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред
- : DocController - рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрджреЗрд╢ рдкрд░ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред
рдЬрдм рд╕рдВрд╕рд╛рдзрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдКрдкрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЕрдВрдд рдореЗрдВ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрддреЗ рдкрд░ рдЪрд╛рд░ рдЕрдиреБрд░реЛрдз рдХрд┐рдП рдЧрдП рдереЗ:
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, Angular рдиреЗ REST рдХреЗ рдЕрдиреБрд╕рд╛рд░ URL рдХреА рд╕рд╣реА рдкрд╣рдЪрд╛рди рдХреА рд╣реИред рдХреИрдл!
рдпрджрд┐ рд░реБрдЪрд┐ рд╣реИ, рддреЛ рдпрд╣рд╛рдВ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдПрдкреАрдЖрдИ рдлрд╝рд╛рдЗрд▓ рд╣реИ:
<cfset resourcePath = cgi.path_info /> <cfif ( cgi.request_method neq "GET" )> <cfset requestBody = getHTTPRequestData().content /> </cfif> <cfif reFind( "^/messages$", resourcePath )> <cfset response = "GET without ID." /> <cfelseif reFind( "^/messages/clear-all$", resourcePath )> <cfset response = "POST with clear-all Controller." /> <cfelseif reFind( "^/messages/\d+$", resourcePath )> <cfset response = "GET with ID." /> <cfelseif reFind( "^/messages/\d+/archive+$", resourcePath )> <cfset response = "POST with archive controller" /> <cfelse> <cfset response = "Hmm, couldn't match resource." /> </cfif> <cfset serializedResponse = serializeJSON( response ) /> <cfheader name="X-Debug-Path" value="#cgi.path_info#" /> <cfcontent type="application/json" variable="#charsetDecode( serializedResponse, 'utf-8' )#" />
рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ, рдХреЛрд▓реНрдбрдлрд╝реНрдпреВрдЬрд╝рди 10 POST рдЕрдиреБрд░реЛрдзреЛрдВ рдкрд░ рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рдЧрдпрд╛ рдЬрдм рддрдХ рдХрд┐ рдореБрдЭреЗ рдЕрдиреБрд░реЛрдз рдмреЙрдбреА (getHttpRequestData () рдлрд╝рдВрдХреНрд╢рди) рддрдХ рдкрд╣реБрдВрдЪ рдирд╣реАрдВ рдорд┐рд▓реАред рдпрд╣ рдХреЗрд╡рд▓ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЕрдиреБрд░реЛрдз рдирд┐рдХрд╛рдп рдореЗрдВ JSON (рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рдВрдХреЗрддрди) рдбреЗрдЯрд╛ рд╣реЛрддрд╛ рд╣реИред рдЬрдм рдпрд╣ рдЦрд╛рд▓реА рдерд╛, рддреЛ рдЕрдиреБрд░реЛрдз рд▓рдЯрдХрд╛ рдирд╣реАрдВ рд╣реИред рдореИрдВ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдФрд░ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдХреЛрд▓реНрдбрдлреНрдпреВрдЬрди 9 рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдореВрд▓