рдХрд╛рдЪреЗ рдореЗрдВ рдПрдХ рдкреНрд░рддрд┐рд╖реНрдард┐рдд рд╡реЗрдм рдПрдкреАрдЖрдИ рдХрд╛ рдирд┐рд░реНрдорд╛рдг

InterSystems Cach├й рдЕрдиреНрдп рд╕рд╣рд╛рдпрддрд╛ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддрд╛ рд╣реИред Habr├й рдкрд░ REST рдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдХреНрдпрд╛ рд▓рд┐рдЦрд╛ ред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдпрд╣ рдПрдХ RESTful рд╡реЗрдм 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 рдХреЗ рд╕рд╛рде / рдмрд╛рдХреА рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВ
  1. рд╕рд┐рд╕реНрдЯрдо рдкреНрд░рдмрдВрдзрди рдкреЛрд░реНрдЯрд▓ (рдкреЛрд░реНрдЯрд▓) рдореЗрдВ:
    • рдкреЛрд░реНрдЯрд▓ тЖТ рд╕рд┐рд╕реНрдЯрдо рдПрдбрдорд┐рдирд┐рд╕реНрдЯреНрд░реЗрд╢рди тЖТ рд╕реБрд░рдХреНрд╖рд╛ тЖТ рдПрдкреНрд▓реАрдХреЗрд╢рди тЖТ рд╡реЗрдм рдПрдкреНрд▓реАрдХреЗрд╢рди
    • рдирдпрд╛ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдмрдирд╛рдПрдБ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ

  2. рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рдВрдкрд╛рджрди рдкреГрд╖реНрда рдкрд░, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлрд╝реАрд▓реНрдб рднрд░реЗрдВ (рдЕрдиреНрдп рдлрд╝реАрд▓реНрдб рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд░рд╣реЗрдВ):
    • рдирд╛рдо: / рдЖрд░рд╛рдо (рдЖрд╡рд╢реНрдпрдХ рд╕реНрд▓реИрд╢)
    • рдХреНрд╖реЗрддреНрд░: USER
    • рдбрд┐рд╕реНрдкреИрдЪ рдХреНрд▓рд╛рд╕: REST.Broker (рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗрд╕ рд╕реЗрдВрд╕рд┐рдЯрд┐рд╡ рд╣реИ)

  3. рд╕рд╣реЗрдЬреЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ



рдЕрдм рд╣рдореЗрдВ REST.Broker рдХреНрд▓рд╛рд╕ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рднрд╡рд┐рд╖реНрдп рдХреЗ рд╡реЗрдм API рдХрд╛ рдкрд╛рде рдореИрдкред рд╕реНрдЯреВрдбрд┐рдпреЛ рдЦреЛрд▓реЗрдВ
  1. USER рдХреНрд╖реЗрддреНрд░ рдкрд░ рдЬрд╛рдПрдВ
  2. Ctrl + N рдпрд╛ рдореЗрдиреВ рд╕реЗ рдлрд╝рд╛рдЗрд▓: рдирдпрд╛ рджрдмрд╛рдХрд░ рдПрдХ рдирдпрд╛ REST.Broker рд╡рд░реНрдЧ рдмрдирд╛рдПрдВред
  3. рдЬрдирд░рд▓ рдЯреИрдм рдЪреБрдиреЗрдВ рдФрд░ рд╡рд╣рд╛рдВ рдХреНрд▓рд╛рд╕ рдХреИрдЪ рдХрд░реЗрдВ
  4. рд╡рд░реНрдЧ рд╡рд┐рдЬрд╝рд╛рд░реНрдб рдореЗрдВ:
    • рдкреИрдХреЗрдЬ рдХрд╛ рдирд╛рдо рджрд░реНрдЬ рдХрд░реЗрдВ: REST
    • рд╡рд░реНрдЧ рдирд╛рдо рджрд░реНрдЬ рдХрд░реЗрдВ: рдмреНрд░реЛрдХрд░
    • рдЕрдЧрд▓рд╛ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ

  5. рдХреНрд▓рд╛рд╕ рдЯрд╛рдЗрдк рд╡рд┐рдВрдбреЛ рдореЗрдВ:
    • рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ
    • рдкреВрд░реНрд╡рдЬ рд╡рд░реНрдЧ рдХрд╛ рдирд╛рдо: % CSP.REST
    • рд╕рдорд╛рдкреНрдд рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ

рд╣рдо рджрд▓рд╛рд▓ рд╡рд░реНрдЧ рдореЗрдВ рдкрде рдорд╛рдирдЪрд┐рддреНрд░ рдФрд░ рд╣реИрдВрдбрд▓рд░ рд╡рд┐рдзрд┐ рд▓рд┐рдЦрддреЗ рд╣реИрдВ
рдХрдХреНрд╖рд╛ REST.Broker% CSP.REST рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИ
{
XData UrlMap
{
< рдорд╛рд░реНрдЧреЛрдВ >
< рдорд╛рд░реНрдЧ Url = "/ рдкрд░реАрдХреНрд╖рдг" рд╡рд┐рдзрд┐ = "GET" рдХреЙрд▓ = "рдкрд░реАрдХреНрд╖рдг" />
</ рдорд╛рд░реНрдЧреЛрдВ >
}
ClassMethod рдЯреЗрд╕реНрдЯ () % рд╕реНрдерд┐рддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ
{
& html < рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ! >
$ $ $ $ рдареАрдХ рд╣реИ
}
}

XData UrlMap рдкрде рдорд╛рдирдЪрд┐рддреНрд░ рдореЗрдВ, URL / рдкрд░реАрдХреНрд╖рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, REST.Broker рд╡рд░реНрдЧ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдзрд┐ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЕрдиреНрдп рд╡рд░реНрдЧреЛрдВ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдХрд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдХреЙрд▓ рдореЗрдВ рд╡рд░реНрдЧ рдХрд╛ рдирд╛рдо рднреА рдмрддрд╛рдирд╛ рд╣реЛрдЧрд╛

рдкрддреЗ рдкрд░ http: // <рд╕рд░реНрд╡рд░ рдХрд╛ рдкрддрд╛> / рдмрд╛рдХреА / рдкрд░реАрдХреНрд╖рдг рд╢рд┐рд▓рд╛рд▓реЗрдЦ "рд╡рд░реНрдХреНрд╕!" рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП
рд╕рдмрд╕реЗ рд╕рд░рд▓ Restful web API рддреИрдпрд╛рд░ рд╣реИред

рдбреЗрдЯрд╛ рдХреА рддреИрдпрд╛рд░реА


рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдбреЗрдЯрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдПрдХ рд╡рд░реНрдЧ Data.Company рдмрдирд╛рдПрдБ
  1. рд╡рд░реНрдЧ рд╡рд┐рдЬрд╝рд╛рд░реНрдб рдореЗрдВ:
    • рдкреИрдХреЗрдЬ рдХрд╛ рдирд╛рдо: рдбреЗрдЯрд╛
    • рд╡рд░реНрдЧ рдХрд╛ рдирд╛рдо: рдХрдВрдкрдиреА
    • рдЕрдЧрд▓рд╛ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред

  2. рдХреНрд▓рд╛рд╕ рдЯрд╛рдЗрдк рд╡рд┐рдВрдбреЛ рдореЗрдВ:
    • Persistent Button рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ
    • рдЕрдЧрд▓рд╛ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ
    • XML рд╕рдХреНрд╖рдо рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ
    • рдбреЗрдЯрд╛ рдЬрдирд╕рдВрдЦреНрдпрд╛ рд╡рд┐рдХрд▓реНрдк рдЪреБрдиреЗрдВред

  3. рд╕рдорд╛рдкреНрдд рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ

рдПрдХ рдирд╛рдо рд╕рдВрдкрддреНрддрд┐ рдмрдирд╛рдПрдБ - рдкреНрд░рддреНрдпреЗрдХ рдХрдВрдкрдиреА рдХрд╛ рдПрдХ рдирд╛рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
рд╡рд░реНрдЧ рдбреЗрдЯрд╛ред рд╡рд┐рд╕реНрддрд╛рд░ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ ( % рд╕реНрдерд╛рдпреА , % рдЖрдмрд╛рджреА , % XML.Adaptor )
{
% рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдирд╛рдо ( POPSPEC = "рдХрдВрдкрдиреА ()" );
}

POPSPEC = "рдХрдВрдкрдиреА ()" - рд╣рдо рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛ рдЬрдирд░реЗрдЯрд░ рдХреЛ рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдЙрд╕рд╕реЗ рдХреНрдпрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЕрдиреНрдпрдерд╛ рд╡рд╣ рд╣рдореЗрдВ рдпрд╣рд╛рдВ рдХреЗ рд▓реЛрдЧреЛрдВ рдХрд╛ рдирд╛рдо рджреЗрдЧрд╛ред

рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рд╡рд░реНрдЧ рднрд░реЗрдВ: w ## рд╡рд░реНрдЧ ( Data.Company )ред рдЖрдмрд╛рдж (10)

рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб


рд░рд┐рдЯрд░реНрди рдСрдкрд░реЗрд╢рди (HTTP - GET) рдХреЗ CRUD рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо RESTful рд╕реЗрд╡рд╛ рдХреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП JSON рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ REST.JSON рдХреНрд▓рд╛рд╕ рдмрдирд╛рдПрдВрдЧреЗред

REST.JSON рдХреНрд▓рд╛рд╕ рдмрдирд╛рдПрдБ
  1. рд╡рд░реНрдЧ рд╡рд┐рдЬрд╝рд╛рд░реНрдб рдореЗрдВ:
    • рдкреИрдХреЗрдЬ рдХрд╛ рдирд╛рдо: рдмрд╛рдХреА
    • рд╡рд░реНрдЧ рдХрд╛ рдирд╛рдо: JSON
    • рдЕрдЧрд▓рд╛ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред

  2. рдХреНрд▓рд╛рд╕ рдЯрд╛рдЗрдк рд╡рд┐рдВрдбреЛ рдореЗрдВ:
    • рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ
    • рдкреВрд░реНрд╡рдЬ рд╡рд░реНрдЧ рдХрд╛ рдирд╛рдо: % рдЖрдзрд╛рд░

  3. рд╕рдорд╛рдкреНрдд рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ

рд╢реБрд░реБрдЖрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рд╡рд┐рдзрд┐ рд▓рд┐рдЦреЗрдВрдЧреЗ рдЬреЛ 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 рдкреЗрдЬ рдмрдирд╛рдПрдВ
  1. Cach├й Studio рдореЗрдВ, Ctrl + N рджрдмрд╛рдХрд░ рдпрд╛ рдореЗрдиреВ рд╕реЗ рдПрдХ рдирдпрд╛ CSP рдкреЗрдЬ рдмрдирд╛рдПрдБ: рдлрд╝рд╛рдЗрд▓ тЖТ рдирдпрд╛
  2. CSP рдлрд╝рд╛рдЗрд▓ рдЯреИрдм рдЪреБрдиреЗрдВ
  3. Cach├й Server рдкреЗрдЬ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ рдареАрдХ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред
  4. 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) { //  GET  RESTful web API $scope.getCompanies=function() { $http.get("/rest/json/companies").success(function(data) { //      companies $scope.companies=data.children; }).error(function(data, status) { //    ,    alert("["+status+"]    ! ["+data+"]"); }); }; //    $scope.create = function (company){ $http.post("/rest/json/company",company) .success(function(data){$scope.getCompanies();$scope.alertzone="  "+company.Name;}).error(function(data,status){ $scope.alertzone="["+status+"]    :( ["+data+"]"; }); } //    $scope.update = function (company){ $http.put("/rest/json/company/"+company.ID,company) .success(function(data){$scope.alertzone="  "+company.Name;}).error(function(data,status){ //  alert(....);  alertzone $scope.alertzone="["+status+"]     :( ["+data+"]"; }); } //   $scope.delete = function (company){ $http.delete("/rest/json/company/"+company.ID) .success(function(data){$scope.getCompanies();$scope.alertzone="  "+company.Name;}).error(function(data,status){ $scope.alertzone="["+status+"]    :( ["+data+"]"; }); } }; </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)
% рдЕрдиреБрд░реЛрдз - рд╡рд░реНрдЧ
% рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ - рд╡рд░реНрдЧ
рдПрдХреНрд╕рдПрдордПрд▓ рдирд┐рд░реНрдпрд╛рдд - рд╡рд░реНрдЧ

Source: https://habr.com/ru/post/In204576/


All Articles