InterSystems Cach├й рдЕрдиреНрдп рд╕рд╣рд╛рдпрддрд╛ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддрд╛ рд╣реИред Habr├й рдкрд░ REST
рдиреЗ рдкрд╣рд▓реЗ
рд╕реЗ рд╣реА рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдХреНрдпрд╛
рд▓рд┐рдЦрд╛ ред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдпрд╣ рдПрдХ RESTful рд╡реЗрдм API рдирд┐рд░реНрдорд╛рдг рдкреИрдЯрд░реНрди рд╣реИ, рдФрд░ рдЗрд╕рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЧреБрдг рд╣реИрдВ:
- рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдХрд╛ рдкреГрдердХреНрдХрд░рдг,
- рд░рд╛рдЬреНрдп (рд╕реНрдЯреЗрдЯрд▓реЗрд╕) рдХреЗ рдмрд╛рд╡рдЬреВрдж,
- рдХреИрд╢реНрдб рдФрд░ рд╕реНрддрд░рд┐рдд рд╡рд╛рд╕реНрддреБрдХрд▓рд╛,
- рдПрдХрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕
- RESTful рд╡реЗрдм API рдХреЗ рд╕рднреА рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдФрд░ рдирд┐рдЬреА рдЙрдк-рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рд░реВрдЯ URL рд╢рд╛рдорд┐рд▓ рд╣реИрдВ,
- HTTP рдкрд░ CRUD - HTTP рдореЗрдердб GET, PUT, POST, DELETE (RESTful web API)ред
рдПрдХ рд╕рд╛рдорд╛рдиреНрдп REST рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ: рдПрдХ рд░реВрдЯ URL (http://example.com/resources/) рдФрд░ рдЪрд╛рдЗрд▓реНрдб URL (http://example.com/resources/item17) рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдо HTTP рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред GET, PUT, POST, DELETE рдХреЗ рддрд░реАрдХреЗред рдиреАрдЪреЗ рдПрдХ рддрддреНрд╡ рдФрд░ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд╕рд╛рде рд╡рд┐рдзрд┐рдпреЛрдВ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рд╣реИ:
рд╡рд┐рдзрд┐ | рдЖрдЗрдЯрдо рд╕рдВрдЧреНрд░рд╣ рдЕрдиреБрд░реЛрдз example.com/resources | рдПрдХрд▓ рдЖрдЗрдЯрдо рдЕрдиреБрд░реЛрдз example.com/resources/itemID |
рдкреНрд░рд╛рдкреНрдд | рд╕рдВрднрд╡рдд: рд╕рдВрдЧреНрд░рд╣ рдЖрдЗрдЯрдо URIs рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рд╕реВрдЪрдирд╛ | рд╕рднреА рдЖрдЗрдЯрдо рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ |
PUT | рдореМрдЬреВрджрд╛ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдПрдХ рдирдП рдХреЗ рд╕рд╛рде рдмрджрд▓реЗрдВ | рдореМрдЬреВрджрд╛ рдЖрдЗрдЯрдо рдХреЛ рдирдП рд╕реЗ рдмрджрд▓реЗрдВ |
рдкреЛрд╕реНрдЯ | рдПрдХ рдирдпрд╛ рд╕рдВрдЧреНрд░рд╣ рдЖрдЗрдЯрдо рдмрдирд╛рдПрдБ | рдЖрдорддреМрд░ рдкрд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ |
рд╣рдЯрд╛рдПрдБ | рд╕рдВрдкреВрд░реНрдг рд╕рдВрдЧреНрд░рд╣ рд╣рдЯрд╛рдПрдВ | рд╕рдВрдЧреНрд░рд╣ рдЖрдЗрдЯрдо рд╣рдЯрд╛рдПрдВ |
рдХрд╛рдЪреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?
Cach├й DBMS рдореЗрдВ, REST рдХрд╛ рд╕рдорд░реНрдерди рд╕рдВрд╕реНрдХрд░рдг 2014.1 рдХреЗ рдмрд╛рдж рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ - рдпрд╣ рд╕рдВрд╕реНрдХрд░рдг рдЕрднреА рднреА InterSystems Campus рдХреЗ рднрд╛рдЧреАрджрд╛рд░реЛрдВ рдФрд░ рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ
рдлрд╝реАрд▓реНрдб рдкрд░реАрдХреНрд╖рдг рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИред REST рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ Cach├й рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ рдПрдХ рдмреНрд░реЛрдХрд░ рд╡рд░реНрдЧ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдЗрди рдПрдХреНрд╕рдЯреЗрдВрд╢рдиреЛрдВ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╕рдордп рдмреЗрд╕ URL рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╕рдВрдмрдВрдзрд┐рдд рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред
рдмреНрд░реЛрдХрд░ рд╡рд░реНрдЧ рдХреЛ% CSP.REST рдХреНрд▓рд╛рд╕ рдХрд╛ рд╡рдВрд╢рдЬ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ URL рдкрде (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
example.com/resources/ID - GET) рдХрд╛ рдПрдХ рдорд╛рдирдЪрд┐рддреНрд░ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ URL рдХреЛ рдПрдХ Cach├й рд╡рд░реНрдЧ рд╡рд┐рдзрд┐ рджреА рдЬрд╛рддреА рд╣реИ рдЬреЛ рд╕рднреА рдХрд╛рд░реНрдп рдХрд░реЗрдЧреАред
рдкрде рдорд╛рдирдЪрд┐рддреНрд░ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдпрд╛ рд╕рд░реНрд╡рд░ рдкрд░ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд URL рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИред
Cach├й рдореЗрдВ REST рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрд╛ рдирдореВрдирд╛ рдлрд╝реНрд▓реЛрдЪрд╛рд░реНрдЯ рд╡реНрдпрд╛рдкрд╛рд░ рдХреЗ рд▓рд┐рдП
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, Dispatch Class REST.Broker рдХреЗ рд╕рд╛рде / рдмрд╛рдХреА рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВ- рд╕рд┐рд╕реНрдЯрдо рдкреНрд░рдмрдВрдзрди рдкреЛрд░реНрдЯрд▓ (рдкреЛрд░реНрдЯрд▓) рдореЗрдВ:
- рдкреЛрд░реНрдЯрд▓ тЖТ рд╕рд┐рд╕реНрдЯрдо рдПрдбрдорд┐рдирд┐рд╕реНрдЯреНрд░реЗрд╢рди тЖТ рд╕реБрд░рдХреНрд╖рд╛ тЖТ рдПрдкреНрд▓реАрдХреЗрд╢рди тЖТ рд╡реЗрдм рдПрдкреНрд▓реАрдХреЗрд╢рди
- рдирдпрд╛ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдмрдирд╛рдПрдБ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ
- рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рдВрдкрд╛рджрди рдкреГрд╖реНрда рдкрд░, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлрд╝реАрд▓реНрдб рднрд░реЗрдВ (рдЕрдиреНрдп рдлрд╝реАрд▓реНрдб рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд░рд╣реЗрдВ):
- рдирд╛рдо: / рдЖрд░рд╛рдо (рдЖрд╡рд╢реНрдпрдХ рд╕реНрд▓реИрд╢)
- рдХреНрд╖реЗрддреНрд░: USER
- рдбрд┐рд╕реНрдкреИрдЪ рдХреНрд▓рд╛рд╕: REST.Broker (рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗрд╕ рд╕реЗрдВрд╕рд┐рдЯрд┐рд╡ рд╣реИ)
- рд╕рд╣реЗрдЬреЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ
рдЕрдм рд╣рдореЗрдВ REST.Broker рдХреНрд▓рд╛рд╕ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рднрд╡рд┐рд╖реНрдп рдХреЗ рд╡реЗрдм API рдХрд╛ рдкрд╛рде рдореИрдкред рд╕реНрдЯреВрдбрд┐рдпреЛ рдЦреЛрд▓реЗрдВ- USER рдХреНрд╖реЗрддреНрд░ рдкрд░ рдЬрд╛рдПрдВ
- Ctrl + N рдпрд╛ рдореЗрдиреВ рд╕реЗ рдлрд╝рд╛рдЗрд▓: рдирдпрд╛ рджрдмрд╛рдХрд░ рдПрдХ рдирдпрд╛ REST.Broker рд╡рд░реНрдЧ рдмрдирд╛рдПрдВред
- рдЬрдирд░рд▓ рдЯреИрдм рдЪреБрдиреЗрдВ рдФрд░ рд╡рд╣рд╛рдВ рдХреНрд▓рд╛рд╕ рдХреИрдЪ рдХрд░реЗрдВ
- рд╡рд░реНрдЧ рд╡рд┐рдЬрд╝рд╛рд░реНрдб рдореЗрдВ:
- рдкреИрдХреЗрдЬ рдХрд╛ рдирд╛рдо рджрд░реНрдЬ рдХрд░реЗрдВ: REST
- рд╡рд░реНрдЧ рдирд╛рдо рджрд░реНрдЬ рдХрд░реЗрдВ: рдмреНрд░реЛрдХрд░
- рдЕрдЧрд▓рд╛ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ
- рдХреНрд▓рд╛рд╕ рдЯрд╛рдЗрдк рд╡рд┐рдВрдбреЛ рдореЗрдВ:
- рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ
- рдкреВрд░реНрд╡рдЬ рд╡рд░реНрдЧ рдХрд╛ рдирд╛рдо: % CSP.REST
- рд╕рдорд╛рдкреНрдд рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ
рд╣рдо рджрд▓рд╛рд▓ рд╡рд░реНрдЧ рдореЗрдВ рдкрде рдорд╛рдирдЪрд┐рддреНрд░ рдФрд░ рд╣реИрдВрдбрд▓рд░ рд╡рд┐рдзрд┐ рд▓рд┐рдЦрддреЗ рд╣реИрдВрдХрдХреНрд╖рд╛ REST.Broker% CSP.REST рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИ
{
XData UrlMap
{
< рдорд╛рд░реНрдЧреЛрдВ >
< рдорд╛рд░реНрдЧ Url = "/ рдкрд░реАрдХреНрд╖рдг" рд╡рд┐рдзрд┐ = "GET" рдХреЙрд▓ = "рдкрд░реАрдХреНрд╖рдг" />
</ рдорд╛рд░реНрдЧреЛрдВ >
}
ClassMethod рдЯреЗрд╕реНрдЯ () % рд╕реНрдерд┐рддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ
{
& html < рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ! >
$ $ $ $ рдареАрдХ рд╣реИ
}
}
XData UrlMap рдкрде рдорд╛рдирдЪрд┐рддреНрд░ рдореЗрдВ, URL / рдкрд░реАрдХреНрд╖рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, REST.Broker рд╡рд░реНрдЧ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдзрд┐ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЕрдиреНрдп рд╡рд░реНрдЧреЛрдВ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдХрд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдХреЙрд▓ рдореЗрдВ рд╡рд░реНрдЧ рдХрд╛ рдирд╛рдо рднреА рдмрддрд╛рдирд╛ рд╣реЛрдЧрд╛
рдкрддреЗ рдкрд░ http: // <рд╕рд░реНрд╡рд░ рдХрд╛ рдкрддрд╛> / рдмрд╛рдХреА / рдкрд░реАрдХреНрд╖рдг рд╢рд┐рд▓рд╛рд▓реЗрдЦ "рд╡рд░реНрдХреНрд╕!" рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП
рд╕рдмрд╕реЗ рд╕рд░рд▓ Restful web API рддреИрдпрд╛рд░ рд╣реИред
рдбреЗрдЯрд╛ рдХреА рддреИрдпрд╛рд░реА
рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдбреЗрдЯрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдПрдХ рд╡рд░реНрдЧ Data.Company рдмрдирд╛рдПрдБ- рд╡рд░реНрдЧ рд╡рд┐рдЬрд╝рд╛рд░реНрдб рдореЗрдВ:
- рдкреИрдХреЗрдЬ рдХрд╛ рдирд╛рдо: рдбреЗрдЯрд╛
- рд╡рд░реНрдЧ рдХрд╛ рдирд╛рдо: рдХрдВрдкрдиреА
- рдЕрдЧрд▓рд╛ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред
- рдХреНрд▓рд╛рд╕ рдЯрд╛рдЗрдк рд╡рд┐рдВрдбреЛ рдореЗрдВ:
- Persistent Button рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ
- рдЕрдЧрд▓рд╛ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ
- XML рд╕рдХреНрд╖рдо рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ
- рдбреЗрдЯрд╛ рдЬрдирд╕рдВрдЦреНрдпрд╛ рд╡рд┐рдХрд▓реНрдк рдЪреБрдиреЗрдВред
- рд╕рдорд╛рдкреНрдд рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ
рдПрдХ рдирд╛рдо рд╕рдВрдкрддреНрддрд┐ рдмрдирд╛рдПрдБ - рдкреНрд░рддреНрдпреЗрдХ рдХрдВрдкрдиреА рдХрд╛ рдПрдХ рдирд╛рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПрд╡рд░реНрдЧ рдбреЗрдЯрд╛ред рд╡рд┐рд╕реНрддрд╛рд░ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ ( % рд╕реНрдерд╛рдпреА , % рдЖрдмрд╛рджреА , % XML.Adaptor )
{
% рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдирд╛рдо ( POPSPEC = "рдХрдВрдкрдиреА ()" );
}
POPSPEC = "рдХрдВрдкрдиреА ()" - рд╣рдо рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛ рдЬрдирд░реЗрдЯрд░ рдХреЛ рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдЙрд╕рд╕реЗ рдХреНрдпрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЕрдиреНрдпрдерд╛ рд╡рд╣ рд╣рдореЗрдВ рдпрд╣рд╛рдВ рдХреЗ рд▓реЛрдЧреЛрдВ рдХрд╛ рдирд╛рдо рджреЗрдЧрд╛ред
рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рд╡рд░реНрдЧ рднрд░реЗрдВ:
w ## рд╡рд░реНрдЧ ( Data.Company )ред рдЖрдмрд╛рдж (10)
рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб
рд░рд┐рдЯрд░реНрди рдСрдкрд░реЗрд╢рди (HTTP - GET) рдХреЗ CRUD рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо RESTful рд╕реЗрд╡рд╛ рдХреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП JSON рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ REST.JSON рдХреНрд▓рд╛рд╕ рдмрдирд╛рдПрдВрдЧреЗред
REST.JSON рдХреНрд▓рд╛рд╕ рдмрдирд╛рдПрдБ- рд╡рд░реНрдЧ рд╡рд┐рдЬрд╝рд╛рд░реНрдб рдореЗрдВ:
- рдкреИрдХреЗрдЬ рдХрд╛ рдирд╛рдо: рдмрд╛рдХреА
- рд╡рд░реНрдЧ рдХрд╛ рдирд╛рдо: JSON
- рдЕрдЧрд▓рд╛ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред
- рдХреНрд▓рд╛рд╕ рдЯрд╛рдЗрдк рд╡рд┐рдВрдбреЛ рдореЗрдВ:
- рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ
- рдкреВрд░реНрд╡рдЬ рд╡рд░реНрдЧ рдХрд╛ рдирд╛рдо: % рдЖрдзрд╛рд░
- рд╕рдорд╛рдкреНрдд рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ
рд╢реБрд░реБрдЖрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рд╡рд┐рдзрд┐ рд▓рд┐рдЦреЗрдВрдЧреЗ рдЬреЛ JSON рдХреЛ рдЙрдирдХреА рд╕рднреА рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рд╡рд╛рд▓реА рдХрдВрдкрдирд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рд╡рд╛рдкрд╕ рд▓реМрдЯрд╛рдПрдЧреАClassMethod GetAllCompanies () % рд╕реНрдерд┐рддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ
{
рд╕реЗрдЯ рд╕реЗрдВрдЯ = $ $ $ рдУрдХреЗ
рдХреЛрд╢рд┐рд╢ рдХрд░реЛ {
## рдХрдХреНрд╖рд╛ ( % ZEN.Auxiliary.jsonSQLProvider ) рдХрд░реЗрдВред % WriteJSONFromSQL (, "Data.Company рд╕реЗ" рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ )
} рдкреВрд░реНрд╡ рдХреИрдЪ {
рд╕реЗрдЯ рд╕реЗрдВрдЯ = рдкреВрд░реНрд╡ ред AsStatus ()
}
рд╕реЗрдВрдЯ рдЫреЛрдбрд╝ рджрд┐рдпрд╛
}
рдпрд╣рд╛рдВ рдПрдХрдорд╛рддреНрд░ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рдзрд┐ jsonSQLProvider рд╡рд░реНрдЧ рд╡рд┐рдзрд┐ рд╣реИ - рдпрд╣ рд╡рд░реНрддрдорд╛рди рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ JSON рдкреНрд░рд╛рд░реВрдк рдореЗрдВ SQL рдХреНрд╡реЗрд░реА рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рдкреИрд░рд╛рдореАрдЯрд░ рд╕реВрдЪреА рдореЗрдВ рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ, рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкрд╣рд▓рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рд╡реИрд░рд┐рдПрдмрд▓ рдХрд╛ рд╡реИрдХрд▓реНрдкрд┐рдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд╛рдо рд╣реИред
рд╣рдордиреЗ JSON рдореЗрдВ рдбреЗрдЯрд╛ рджреЗрдирд╛ рд╕реАрдЦрд╛, рд▓реЗрдХрд┐рди рдмреНрд░реЛрдХрд░ рдХреЛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдирд╣реАрдВ рд╣реИред
REST.Broker рдкрде рдорд╛рдирдЪрд┐рддреНрд░ рдореЗрдВ рдПрдХ рдкрде рдЬреЛрдбрд╝реЗрдВ рддрд╛рдХрд┐ рдпрд╣ рдкрддрд╛ рдЪрд▓реЗрдорд╛рд░реНрдЧ рдпреВрдЖрд░рдПрд▓ = "/ json / рдХрдВрдкрдирд┐рдпрд╛рдБ" рд╡рд┐рдзрд┐ = "GET" рдХреЙрд▓ = "REST.JSON: GetAllCompanies" />
рд╣реЛ рдЧрдпрд╛! рдЕрдм http: // <server address> / rest / json / companies рдореЗрдВ рдЖрдкрдХреЛ рдПрдХ рдЙрджрд╛рд╣рд░рдг JSON рдореЗрдВ рдХрдВрдкрдирд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рдорд┐рд▓реЗрдЧреАред
рд╕рд░реНрд╡рд░ - рдЧреНрд░рд╛рд╣рдХ!
рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреА рддрд░рдл, рд╣рдо JSON рдХреЛ рдЖрдВрдЦ рдХреЛ рдкреНрд░рд╕рдиреНрди рдХрд░рдиреЗ рд╡рд╛рд▓реА рдЪреАрдЬ рдореЗрдВ рдмрджрд▓ рджреЗрдВрдЧреЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо AngularJS MVC JS рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдирдпрд╛ CSP рдкреЗрдЬ рдмрдирд╛рдПрдВ- Cach├й Studio рдореЗрдВ, Ctrl + N рджрдмрд╛рдХрд░ рдпрд╛ рдореЗрдиреВ рд╕реЗ рдПрдХ рдирдпрд╛ CSP рдкреЗрдЬ рдмрдирд╛рдПрдБ: рдлрд╝рд╛рдЗрд▓ тЖТ рдирдпрд╛
- CSP рдлрд╝рд╛рдЗрд▓ рдЯреИрдм рдЪреБрдиреЗрдВ
- Cach├й Server рдкреЗрдЬ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ рдареАрдХ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред
- Csp / user рдлреЛрд▓реНрдбрд░ рдореЗрдВ рдмрдиреЗ рдкреЗрдЬ рдХреЛ rest.csp рдирд╛рдо рд╕реЗ рд╕реЗрд╡ рдХрд░реЗрдВ
рд╣рдо рд╕рд░реНрд╡рд░ рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ, рд╣рдореЗрдВ рдЬрд╡рд╛рдм рдорд┐рд▓рддрд╛ рд╣реИ - JSON рдореЗрдВ рдХрдВрдкрдирд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА - рдЗрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ<! doctype html>
< html рдПрдирдЬреА-рдРрдк >
< рд╕рд┐рд░ >
< рд╢реАрд░реНрд╖рдХ > рдмрд╛рдХреА рдЕрдХрд╛рджрдореА </ рд╢реАрд░реНрд╖рдХ >
< script src = " ajax.googleapis.com/ajax/libs/angularjs/1.2.3/angular.min.js" > </ script >
< рд▓рд┐рдкрд┐ рднрд╛рд╖рд╛ = "рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ" >
рдлрд╝рдВрдХреНрд╢рди ctrl ($ рдЧреБрдВрдЬрд╛рдЗрд╢, $ http) {
// RESTful рд╡реЗрдм рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
$ http.get ( "/ рдмрд╛рдХреА / json / рдХрдВрдкрдирд┐рдпрд╛рдБ" )ред рдЕрд╕рдлрд▓ ( рдлрд╝рдВрдХреНрд╢рди (рдбреЗрдЯрд╛) {
// рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХрдВрдкрдирд┐рдпреЛрдВ рдХреЗ рд╡реЗрд░рд┐рдПрдмрд▓ рдореЗрдВ рд░рдЦреЗрдВ
$ рдЧреБрдВрдЬрд╛рдЗрд╢ ред ppp = data.children;
})ред рддреНрд░реБрдЯрд┐ ( рдлрд╝рдВрдХреНрд╢рди (рдбреЗрдЯрд╛, рд╕реНрдерд┐рддрд┐) {
// рдЖрдЙрдЯрдкреБрдЯ рдПрд░рд░ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдпрджрд┐ рдХреЛрдИ рд╣реЛрддреА рд╣реИ
рдЪреЗрддрд╛рд╡рдиреА ( "[" + рд╕реНрдерд┐рддрд┐ + "] рдХрдВрдкрдирд┐рдпреЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рддреНрд░реБрдЯрд┐! [" + рдбреЗрдЯрд╛ + "]" );
})
};
</ script >
</ head >
< рд╢рд░реАрд░ рдПрдирдЬреА-рдирд┐рдпрдВрддреНрд░рдХ = "ctrl" >
< div ng-repeat = "рдХрдВрдкрдирд┐рдпреЛрдВ рдореЗрдВ рдХрдВрдкрдиреА" >
{{Company.Name}}
</ div >
</ рд╢рд░реАрд░ >
</ html >
рд╣рдо рдкреГрд╖реНрда рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдкрддрд╛ http: // <рд╕рд░реНрд╡рд░ рдкрддреЗ> /csp/user/rest.csp рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдХрдВрдкрдирд┐рдпреЛрдВ рдХреА рдкреВрд░реА рд╕реВрдЪреА рджреЗрдЦреЗрдВред рдкрд╣рд▓реЗ рдХреА рддрд░рд╣, рдПрдХ рдЙрджрд╛рд╣рд░рдг ред
рд╕рд░реНрд╡рд░ рдкрд░ рдХреНрд░рд┐рдПрдЯ, рдЕрдкрдбреЗрдЯ, рдбрд┐рд▓реАрдЯ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рд╣рдо рд╢реЗрд╖ 3 CRUD рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ: рдПрдХ рдХрдВрдкрдиреА рдХреЛ рдЬреЛрдбрд╝рдирд╛, рдмрджрд▓рдирд╛ рдФрд░ рд╣рдЯрд╛рдирд╛ред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, REST.JSON рд╡рд░реНрдЧ рдореЗрдВ рд╡рд┐рдзрд┐рдпрд╛рдБ рдЬреЛрдбрд╝реЗрдВClassMethod CreateCompany () % рд╕реНрдерд┐рддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ
{
s st = $$$ рдареАрдХ рд╣реИ
рдХреЛрд╢рд┐рд╢ рдХрд░реЛ {
// JSON рдХреЛ рдЕрдиреБрд░реЛрдз рд╕реЗ рд▓реЗрдВ рдФрд░ рдЗрд╕реЗ рдХреНрд▓рд╛рд╕ Data.Company рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдмрджрд▓реЗрдВ
$$$ THROWONERROR ( st , ## рд╡рд░реНрдЧ ( % ZEN.Auxiliary.jsonProvider )ред % ConvertJSONToObject ( % request ред рд╕рд╛рдордЧреНрд░реА , "Data.Company", Obj , 1)ред
$$$ рдереНрд░реЛрдирд░реЛрд░ ( st , obj ред % рдмрдЪрд╛рдУ ())
}
рднреВрддрдкреВрд░реНрд╡ {
s рд╕реЗрдВрдЯ = рдкреВрд░реНрд╡ ред AsStatus ()
}
рд╕реЗрдВрдЯ рдЫреЛрдбрд╝ рджрд┐рдпрд╛
}
ClassMethod DeleteCompany ( % рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦреЗрдВ ) % рд╕реНрдерд┐рддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ
{
рд╕реЗрдЯ рд╕реЗрдВрдЯ = $ $ $ рдУрдХреЗ
рдХреЛрд╢рд┐рд╢ рдХрд░реЛ {
$$$ THROWONERROR ( st , ## рд╡рд░реНрдЧ ( Data.Company )ред % DeleteId ( compid )
} рдкреВрд░реНрд╡ рдХреИрдЪ {
s рд╕реЗрдВрдЯ = рдкреВрд░реНрд╡ ред AsStatus ()
}
рд╕реЗрдВрдЯ рдЫреЛрдбрд╝ рджрд┐рдпрд╛
}
ClassMethod UpdateCompany ( % рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦреЗрдВ ) % рд╕реНрдерд┐рддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ
{
рд╕реЗрдЯ рд╕реЗрдВрдЯ = $ $ $ рдУрдХреЗ
рдХреЛрд╢рд┐рд╢ рдХрд░реЛ {
$$$ рдереНрд░реЛрдирд░реЛрд░ ( рд╕реЗрдВрдЯ , ## рд╡рд░реНрдЧ ( % ZEN.Auxiliary.jsonProvider )ред % ConvertJSONToObject ( % request ред рд╕рд╛рдордЧреНрд░реА ,, Obj , 1) ред
// рд╡рд╣ рд╡рд╕реНрддреБ рдЦреЛрд▓реЗрдВ рдЬрд┐рд╕реЗ рд╣рдо рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ
рд╕реЗрдЯ COMP = ## рд╡рд░реНрдЧ ( Data.Company )ред % OpenId ( compid )
рдлреЗрдВрдХ : COMP = $ $ $ NULLOREF ## рд╡рд░реНрдЧ ( % рдЕрдкрд╡рд╛рдж .tatusException )ред CreateFromStatus ( $$$ ERROR (5001, "рдХрдВрдкрдиреА рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ" ))
// рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ рдФрд░ рд╕рд╣реЗрдЬреЗрдВ
рдХрдВрдкреНрдпреВрдЯрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ ред рдирд╛рдо = рдУрдмреНрдЬ ред рдирд╛рдо
$$$ рдереНрд░реЛрдирд░реЛрд░ ( рд╕реЗрдВрдЯ , COMP ред % рдмрдЪрд╛рдУ ())
}
рднреВрддрдкреВрд░реНрд╡ {
рд╕реЗрдЯ рд╕реЗрдВрдЯ = рдкреВрд░реНрд╡ ред AsStatus ()
}
рд╕реЗрдВрдЯ рдЫреЛрдбрд╝ рджрд┐рдпрд╛
}
рдмреНрд░реЛрдХрд░ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдкрде рдЬреЛрдбрд╝реЗрдВ< рдорд╛рд░реНрдЧ Url = "/ json / company" рд╡рд┐рдзрд┐ = "POST" рдХреЙрд▓ = "REST.JSON: CreateComp" >>
< рдорд╛рд░реНрдЧ Url = "/ json / company /: compid" рд╡рд┐рдзрд┐ = "DELETE" рдХреЙрд▓ = "REST.JSON: DeleteCompany" />
< рдорд╛рд░реНрдЧ Url = "/ json / company /: compid" рд╡рд┐рдзрд┐ = "PUT" рдХреЙрд▓ = "REST.JSON: UpdateCompany" />
рдпрд╣ рдХреИрдЪ рдореЗрдВ CRUD- рдкреВрд░реНрдг рд░реЗрд╕реНрдЯрдлреБрд▓ рд╡реЗрдм рдПрдкреАрдЖрдИ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред
рдХреНрд▓рд╛рдЗрдВрдЯ рдХреНрд░рд┐рдПрдЯ, рдЕрдкрдбреЗрдЯ, рдбрд┐рд▓реАрдЯ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдХрдВрдкрдирд┐рдпреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ, рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ, рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП rest.csp рдкреГрд╖реНрда рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝реЗрдВ<!doctype html> <html ng-app> <head> <title>REST Academy</title> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.3/angular.min.js"></script> <script language="javascript"> function ctrl($scope,$http) { </script> </head> <body ng-controller="ctrl" ng-init="getCompanies();"> <h4 ng-model="alertzone"><font color=red>{{alertzone}}</font></h4> <form name="compCreateForm" ng-model="company" ng-submit="create(company); company='';"> <input type="text" ng-model="company.Name"/> <input type="submit" value=""/> </form> <br> <div ng-repeat="company in companies"> <form name="compForm" ng-submit="update(company); compForm.$setPristine();"> <input type="text" ng-model="company.Name"/> <input type="submit" value="" ng-show="compForm.$dirty"/> <input type="button" value="X" ng-click="delete(company);"/> </form> </div> </body> </html>
рдирддреАрдЬрддрди, рдлреНрд░рдВрдЯрдПрдВрдб http: // <server address> /csp/user/rest.csp рдкрд░ рд╡реЗрдм API рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИред
рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ ред
рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдордиреЗ рд╕реАрдЦрд╛ рдХрд┐ рдХреИрд╕реЗ рдФрд░ Cach├й рд╕рд░реНрд╡рд░ рдкрд░ рдПрдХ RESTful рд╡реЗрдм API рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВред рдХреИрдЪ рд╕рд░реНрд╡рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рдХрд╛ рдирд┐рд░реНрдорд╛рдг рднреА рд╕рдВрднрд╡ рд╣реИред
рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реИ?
рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ, рддреЛ рдореИрдВ рдЖрдкрдХреЛ рд╕реБрд░рдХреНрд╖рд╛, рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ, рдФрд░ рдЕрдиреНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ RESTful рд╡реЗрдм API рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реВрдВред
рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ
рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рдирд┐рд░реНрдорд┐рдд RESTful рд╡реЗрдм рдПрдкреАрдЖрдИ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВRESTful рд╡реЗрдм API рдЙрджрд╛рд╣рд░рдгInterSystems Technology Glossary - рд░реЗрд╕реНрдЯрдлреБрд▓ рд╡реЗрдм API рднреА рд╣реИJSON рдирд┐рд░реНрдпрд╛рдд - рд╡рд░реНрдЧ -
class2 (SQL)% рдЕрдиреБрд░реЛрдз -
рд╡рд░реНрдЧ% рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ -
рд╡рд░реНрдЧрдПрдХреНрд╕рдПрдордПрд▓ рдирд┐рд░реНрдпрд╛рдд -
рд╡рд░реНрдЧ