RBAC рдФрд░ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде Yii рдлреНрд░реЗрдорд╡рд░реНрдХ рдкрд░ RESTful API

Yii рдлреНрд░реЗрдорд╡рд░реНрдХ рдкрд░ RESTFul рдПрдкреАрдЖрдИ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рддреИрдпрд╛рд░ рд╕рдорд╛рдзрд╛рди рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЗрди рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдЖрдк рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рд╕рдмрдХреБрдЫ рдХреЗрд╡рд▓ рдХреБрддреНрддреЛрдВ рдФрд░ рдЙрдирдХреЗ рдорд╛рд▓рд┐рдХреЛрдВ рдХреЗ рд╕рд╛рде рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рд╕реБрдВрджрд░ рджрд┐рдЦрддрд╛ рд╣реИред

рд╢рд╛рдпрдж рд▓реЗрдЦ рдХреА рддреИрдпрд╛рд░реА рдФрд░ рд▓реЗрдЦрди рдХреЗ рджреМрд░рд╛рди, рдпрд╣ рдПрдХ YEST2 рдХреА рд░рд┐рд▓реАрдЬ рдХреЗ рд╕рд╛рде рдЕрдкрдиреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХрддрд╛ рдЦреЛ рджрд┐рдпрд╛ рдЬрд┐рд╕рдореЗрдВ рдПрдХ RESTful рдПрдкреАрдЖрдИ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд░реВрдкрд░реЗрдЦрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд▓реЗрдЦ рдЕрднреА рднреА рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рдЬреЛ рдЕрднреА рддрдХ Yii2 рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рдпрд╛ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдиреНрд╣реЗрдВ рдореМрдЬреВрджрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг-рд╡рд┐рдХрд╕рд┐рдд рдПрдкреАрдЖрдИ рдХреЛ рдЬрд▓реНрджреА рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЖрдкрдХреЛ рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рджреВрдВрдЧрд╛, рдЬрд┐рдиреНрд╣реЗрдВ рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ:

  1. рдореИрдВрдиреЗ рдЬрд┐рди рдкрд╣рд▓реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕ рддрд░рд╣ рдХреЗ рд░рд┐рдХреЙрд░реНрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЗрд╡рд▓ рдореЙрдбрд▓ рдХреЗ рдирд╛рдо рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдВ ред рдЗрд╕ рддрд░рд╣ рдХреЗ рддрдВрддреНрд░ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ AuthItems рддрд╛рд▓рд┐рдХрд╛, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ AuthItems рддрдВрддреНрд░ рдореЗрдВ рдлреНрд░реЗрдорд╡рд░реНрдХ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдпрджрд┐ рдХреЛрдИ рдЗрд╕рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИ, рддреЛ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдПрдХ рдЕрджреНрднреБрдд рд▓реЗрдЦ рд╣реИ )ред рдЗрд╕рдореЗрдВ рднреВрдорд┐рдХрд╛рдПрдВ, рд╕рдВрдЪрд╛рд▓рди рдФрд░ рдХрд╛рд░реНрдп рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬреЛ рдХрд┐ type рдЭрдВрдбреЗ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдФрд░ рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрди рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ рдПрдХ рдЕрд▓рдЧ рдпреВрдЖрд░рдПрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛:
    GET: /api/authitems/?type=0 -
    GET: /api/authitems/?type=1 -
    GET: /api/authitems/?type=2 -

    рд▓реЗрдХрд┐рди рдРрд╕реЗ:
    GET: /api/operations -
    GET: /api/tasks -
    GET: /api/roles -

    рд╕рд╣рдордд рд╣реВрдВ, рджреВрд╕рд░рд╛ рд╡рд┐рдХрд▓реНрдк рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рдФрд░ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЙрд╕ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЗрд╕рдореЗрдВ рд░реВрдкрд░реЗрдЦрд╛ рдФрд░ рдЖрд░рдмреАрдПрд╕реА рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИред
  2. рджреВрд╕рд░рд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрд╡рд╕рд░ рдПрдХ рдбреЗрдЯрд╛ рдЦреЛрдЬ рдФрд░ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рддрдВрддреНрд░ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╢рд░реНрддреЛрдВ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдФрд░ рдирд┐рдпрдореЛрдВ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЗ рдПрдХ рдПрдирд╛рд▓реЙрдЧ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛:
     SELECT * FROM users WHERE (age>25 AND first_name LIKE '%alex%') OR (last_name='shepard'); 

  3. рдХрднреА-рдХрднреА рдмрдирд╛рдиреЗ, рдЕрджреНрдпрддрди рдХрд░рдиреЗ, рд╕рдВрдЧреНрд░рд╣ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред рдпрд╛рдиреА рдЦреЛрдЬ рдФрд░ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдПрдХ рдХреНрд╡реЗрд░реА рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рдХреА nth рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдмрджрд▓рдирд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЕрдХреНрд╕рд░ рдХрд┐рд╕реА рднреА рд╣рд╛рд▓рдд рдореЗрдВ рдкрдбрд╝рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рд░рд┐рдХреЙрд░реНрдб рдХреЛ рд╣рдЯрд╛рдиреЗ рдпрд╛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рдорд╣рдВрдЧрд╛ рд╣реИред
  4. рдПрдХ рдЕрдиреНрдп рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ рд╕рдВрдмрдВрдзрд┐рдд рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдереАред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: рдЕрдкрдиреЗ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдЗрди рднреВрдорд┐рдХрд╛рдУрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред
  5. рдмреЗрд╢рдХ, рдкреНрд░рд╛рдкреНрдд рд░рд┐рдХреЙрд░реНрдб ( limit ) рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдиреЗ, рдЪрдпрди рдХреА рд╢реБрд░реБрдЖрдд рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ ( offset ) рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛, рдФрд░ рд░рд┐рдХреЙрд░реНрдб рдХреЗ рдХреНрд░рдо рдХреЛ рдХреНрд░рдордмрджреНрдз ( order by ) рдХреЗ рдмрд┐рдирд╛ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдХрдо рд╕реЗ рдХрдо рдХрд┐рд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред рд╕рдореВрд╣ ( group by ) рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рднреА рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред
  6. рдкреНрд░рддреНрдпреЗрдХ рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ ( checkAccess рд╡рд┐рдзрд┐ рдЕрднреА рднреА рдЙрд╕реА checkAccess рдореЗрдВ рд╣реИ)ред
  7. рдФрд░ рдЕрдВрдд рдореЗрдВ, рдкреВрд░реЗ рдорд╛рдорд▓реЗ рдХреЛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

"рд╡рд┐рд╢рд▓рд┐рд╕реНрдЯ" рдХреА рд▓рдЧрднрдЧ рдРрд╕реА рд╕реВрдЪреА рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЗрд╕ рдЕрджреНрднреБрдд рд░реВрдкрд░реЗрдЦрд╛ рдкрд░ рдПрдкреАрдЖрдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдореЗрд░рд╛ рд╕рдВрд╕реНрдХрд░рдг рдкреИрджрд╛ рд╣реБрдЖ рдерд╛!

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, API рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред


рдЖрдЗрдП рдЙрд╕реА RBAC рдШрдЯрдХ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рджреЗрдЦреЗрдВред

рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рд░рд┐рдХреЙрд░реНрдб

рд╕рдм рдХреБрдЫ рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рд╣реИ:
GET: /roles -
GET: /roles/42 - id=42

рдЦреЛрдЬреЗрдВ рдФрд░ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░реЗрдВ

рдЙрдирдХреЗ рддрдВрддреНрд░ рд▓рдЧрднрдЧ рд╕рдорд╛рди рд╣реИрдВ, рдХреЗрд╡рд▓ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдЦреЛрдЬ рдХрд░рддреЗ рд╕рдордп, рдЖрдВрд╢рд┐рдХ рд╕рдВрдпреЛрдЧ рдХреЗ рд╕рд╛рде рд░рд┐рдХреЙрд░реНрдб рдЪрдпрди рдореЗрдВ рдЖрддреЗ рд╣реИрдВ, рдФрд░ рдЬрдм рдкреВрд░реНрдг рдХреЗ рд╕рд╛рде рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЦреЗрддреЛрдВ рдФрд░ рдЙрдирдХреЗ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рд╕рдВрдпреЛрдЬрди JSON рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИред рдпрд╣ рд╡рд╣ рдерд╛ рдЬреЛ рдореБрдЭреЗ рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд▓рдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

{"name":"alex", "age":"25"} - рдлреЙрд░реНрдо рдХреА рдПрдХ рдХреНрд╡реЗрд░реА рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ: WHERE name='alex' AND age=25
[{"name":"alex"}, {"age":"25"}] - рдлреЙрд░реНрдо рдХреА рдПрдХ рдХреНрд╡реЗрд░реА рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ: WHERE name='alex' OR age=25

рдпрд╛рдиреА рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рджрд┐рдП рдЧрдП рдкреИрд░рд╛рдореАрдЯрд░ AND рд╕реНрдерд┐рддрд┐ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╕рд░рдгреА рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреИрд░рд╛рдореАрдЯрд░ OR рд╕реНрдерд┐рддрд┐ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрддреЗ рд╣реИрдВред

AND рдФрд░ OR рд╢рд░реНрддреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╢рд░реНрддреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдореВрд▓реНрдп рд╕реЗ рдкрд╣рд▓реЗ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП:

рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг:
GET: /users?filter={"name":"alex"} - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдирд╛рдо alex
GET: /users?filter={"name":"alex", "age":">25"} - alex рдФрд░ 25 рд╡рд░реНрд╖ рд╕реЗ рдЕрдзрд┐рдХ рдЖрдпреБ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛
GET: /users?filter=[{"name":"alex"}, {"name":"dmitry"}] - рдЬрд┐рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдирд╛рдо alex dmitry
GET: /users?search={"name":"alex"} - рдЬрд┐рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рд╕рдмрд╕реНрдЯреЗрдирд┐рдВрдЧ alex (alexey, alexander, alex, рдЖрджрд┐)

рд╕рдВрдмрдВрдзрд┐рдд рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ

рдЖрдк рдЕрдХреНрд╕рд░ рд╕рдВрдмрдВрдзрд┐рдд рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ:
GET: /roles/42/operations - id = 42 рд╕рд╛рде рдПрдХ рднреВрдорд┐рдХрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рднреА рд╕рдВрдЪрд╛рд▓рди рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ

рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдореИрдВрдиреЗ рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдореИрдВрдиреЗ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдХрд┐ рдЗрд╕рдореЗрдВ рдХрдИ рдХрдорд┐рдпрд╛рдВ рд╣реИрдВред

рдПрдХ рд╕реЗ рдХрдИ

рдпрджрд┐ рд╕рдВрдмрдВрдз рдХрдИ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рддреЛ рдЖрдк рдлрд╝рд┐рд▓реНрдЯрд░ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╣реИ:
GET: operations?filter={"role_id":"42"} - id = 42 рд╕рд╛рде рднреВрдорд┐рдХрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рднреА рд╕рдВрдЪрд╛рд▓рди рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ - id = 42

рдмрд╣реБрддреЛрдВ рдХреЛ

рд╕рдВрдЪрд╛рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдПрдХ рдЕрд▓рдЧ рдЗрдХрд╛рдИ рдХреЗ рд░реВрдк рдореЗрдВ рдХрдИ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЕрдХреНрд╕рд░ рд╕рдВрдЪрд╛рд░ рддрд╛рд▓рд┐рдХрд╛ child_id - child_id рдФрд░ child_id рд▓рд┐рдП рд╕реАрдорд┐рдд рдирд╣реАрдВ child_id ред рдЙрддреНрдкрд╛рджреЛрдВ ( products ) рдФрд░ рдЙрдирдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ ( features ) рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдПрдХ рд╕рдВрдЪрд╛рд░ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рджреЛ рдлрд╝реАрд▓реНрдб рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП: product_id рдФрд░ feature_id ред рд▓реЗрдХрд┐рди, рдпрджрд┐ рдЖрдкрдХреЛ рдЙрддреНрдкрд╛рдж рдХрд╛рд░реНрдб рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рд╕реВрдЪреА рдХрд╛ рдХреНрд░рдо рдХреНрд░рдо рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ ordering рдлрд╝реАрд▓реНрдб рдХреЛ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдЖрдкрдХреЛ рдЙрд╕реА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдореВрд▓реНрдп value рдХреЛ рднреА рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред
рдкреНрд░рдкрддреНрд░ рдХреЗ url рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛:
POST: /products/42/feature/1 - рдЙрддреНрдкрд╛рдж рд╡рд┐рд╢реЗрд╖рддрд╛ 1 рд╕рд╛рде рд╕рд╣рдпреЛрдЧреА рдЙрддреНрдкрд╛рдж 42
GET: /products/42/feature/1 - рдЙрддреНрдкрд╛рдж 1 рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ (рдкреНрд░рд╡реЗрд╢ рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐) рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ

рд╕рдорд╛рди рдХреНрд░рдо рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рдорд╛рди (рд╕рдВрдЪрд╛рд░ рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рдкреНрд░рд╡реЗрд╢) рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЕрдиреБрднрд╡ рд╕реЗ, рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдерд╛ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдВрдмрдВрдзреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдЗрдХрд╛рдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП productfeatures ред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ:
POST: /productfeatures - рдЕрдиреБрд░реЛрдз рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ product_id , feature_id , ordering рдФрд░ value рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рд╡рд┐рд╢реЗрд╖рддрд╛ рдФрд░ рдЙрддреНрдкрд╛рдж рдХреЛ рд▓рд┐рдВрдХ рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рдореВрд▓реНрдп рдФрд░ рдХреНрд░рдо рдХреНрд░рдо рдХреЛ рджрд░реНрд╢рд╛рддреЗ рд╣реИрдВред
GET: /productfeatures?filter={"product_id":"42"} - рд╣рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЙрддреНрдкрд╛рдж рдХреЗ рд╕рднреА рд▓рд┐рдВрдХ рдорд┐рд▓рддреЗ рд╣реИрдВред рдЬрд╡рд╛рдм рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ:
 [ {"id":"12","feature_id":"1","product_id":"42","value":"33"}, {"id":"13","feature_id":"2","product_id":"42","value":"54"} ] 

PUT: /productfeatures/12 - id=12 рд╕рд╛рде рд▓рд┐рдВрдХ рдХреЛ рдмрджрд▓реЗрдВ

рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рджреЛрд╖реЛрдВ рдХреЗ рдмрд┐рдирд╛ рднреА рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрддреНрдкрд╛рдж рдХрд╛ рдирд╛рдо рдФрд░ рджреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдмрд┐рдирд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдирд╛рдоред рдпрд╣рд╛рдВ, рд╕рдВрдмрдВрдзрд┐рдд рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрдВрддреНрд░ рд╣рдорд╛рд░реА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЖрддрд╛ рд╣реИред

рд╕рдВрдмрдВрдзрд┐рдд рдбреЗрдЯрд╛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣рд╛ рд╣реИ

GET: /productfeatures/12?with=product,feature - рдЙрддреНрдкрд╛рдж рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдХрдиреЗрдХреНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ред рдЙрджрд╛рд╣рд░рдг рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛:
 { "id":"12", "feature_id":"1", "product_id":"42", "value":"33", "feature":{"id":"1","name":"","unit":""}, "product":{"id":"42","name":"", ...}, } 


рдЙрд╕реА рддрд░рд╣, рдЖрдк рдорд╛рд▓ рдХреА рд╕рднреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
GET: /products/42?with=features - id=42 рдЙрддреНрдкрд╛рдж рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ id=42 рдФрд░ рд╕рд░рдгреА рдореЗрдВ рдЗрд╕рдХреА рд╕рднреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВред рдЙрджрд╛рд╣рд░рдг рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛:
 { "id":"42", "name":"", "features":[{"id":"1","name":"","unit":""}, {"id":"2","name":"","unit":""}], ... } 

рдЖрдЧреЗ рджреЗрдЦрддреЗ рд╣реБрдП, рдореЗрд░рд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧ with рд╕реЗ рди рдХреЗрд╡рд▓ рд╕рдВрдмрдВрдзрд┐рдд рддрд╛рд▓рд┐рдХрд╛рдУрдВ рд╕реЗ рдбреЗрдЯрд╛ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рдгреА рдХрд╛ рднреА рд╡рд░реНрдгрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдЖрдкрдХреЛ рдЙрддреНрдкрд╛рдж рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЗрд╕рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рдореВрд▓реНрдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЙрддреНрдкрд╛рдж рдХреА рд╕реНрдерд┐рддрд┐ status рдлрд╝реАрд▓реНрдб рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХреА рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░рд╛рдкреНрдд status:0 рдорд╛рди рд╣рдореЗрдВ рдЕрдзрд┐рдХ рдирд╣реАрдВ рдмрддрд╛рдПрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрддреНрдкрд╛рдж рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде, рдЖрдк рдЙрдирдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рдЗрд╕рдХреА рд╕рдВрднрд╛рд╡рд┐рдд рд╕реНрдерд┐рддрд┐ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВ:
 { ..., "status":1, "statuses":{0:"  ", 1:" ", 2:" "}, ..., } 


рдбреЗрдЯрд╛ рдбрд┐рд▓реАрдЯ рдХрд░рдирд╛


DELETE: /role/42 - id=42
DELETE: /role -

рд╣рдЯрд╛рддреЗ рд╕рдордп, рдЖрдк рдЦреЛрдЬ рдФрд░ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
DELETE: /role?filter={"name":"admin"} - "admin"


рдбреЗрдЯрд╛ рдирд┐рд░реНрдорд╛рдг

POST: /role -

рдПрдХрд▓ рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рд╛рде, рдЖрдк рдЕрдиреБрд░реЛрдз рдХреЗ рдирд┐рдХрд╛рдп рдореЗрдВ рдбреЗрдЯрд╛ рдХреА рдПрдХ рд╕рд░рдгреА рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдХреЗ рдПрдХрд▓ рд░рд┐рдХреЙрд░реНрдб рдФрд░ рд╕рдВрдЧреНрд░рд╣ рджреЛрдиреЛрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░рдкрддреНрд░
 [ {"name":"admin"}, {"name":"guest"} ] 

рдЗрд╕ рддрд░рд╣, рд╕рдВрдмрдВрдзрд┐рдд рдирд╛рдо рд╡рд╛рд▓реА рджреЛ рднреВрдорд┐рдХрд╛рдПрдВ рдмрдирд╛рдИ рдЬрд╛рдПрдВрдЧреАред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рд░реНрд╡рд░ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рднреА рдмрдирд╛рдП рдЧрдП рд░рд┐рдХреЙрд░реНрдб рдХреА рдПрдХ рд╕рд░рдгреА рд╣реЛрдЧреАред

рдбреЗрдЯрд╛ рдкрд░рд┐рд╡рд░реНрддрди

рдирд┐рд░реНрдорд╛рдг рдХреЗ рдЕрдиреБрд░реВрдк рд╕рднреА, рдХреЗрд╡рд▓ рдЖрдкрдХреЛ url рдФрд░ рд╡рд┐рдзрд┐ рдореЗрдВ id рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, PUT:
PUT: /role/42 - 42

рдХрдИ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдБ рдмрджрд▓реЗрдВ:
PUT: /role
рдЕрдиреБрд░реЛрдз рд╢рд░реАрд░ рдореЗрдВ рдЧреБрдЬрд░ рд░рд╣рд╛ рд╣реИ
 [ {"id":"1","name":"admin"}, {"id":"2","name":"guest"} ] 

рдЖрдИрдбреА 1 рдФрд░ 2 рдХреЗ рд╕рд╛рде рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдВ рдмрджрд▓реА рдЬрд╛рдПрдВрдЧреАред

рдлрд╝рд┐рд▓реНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдкрд╛рдП рдЧрдП рд░рд┐рдХреЙрд░реНрдб рдмрджрд▓реЗрдВ:
PUT: /user?filter={"role":"guest"}' - role=guest


рд░рд┐рдХреЙрд░реНрдб рдХреА рд╕реАрдорд╛, рдСрдлрд╕реЗрдЯ рдФрд░ рдЖрджреЗрд╢

рдЖрдВрд╢рд┐рдХ рдирдореВрдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рд╛рдорд╛рдиреНрдп limit рдФрд░ offset ред

offset - рд╢реВрдиреНрдп рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдСрдлрд╕реЗрдЯ
limit - рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛
order - рдХреНрд░рдо рдХреНрд░рдо
GET: /users/?offset=10&limit=10
GET: /users/?order=id DESC
GET: /users/?order=id ASC

рдЖрдк рдЧрдардмрдВрдзрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
GET: /users/?order=parent_id ASC,ordering ASC


рдпрд╣ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╕реАрдорд╛ рдФрд░ рдСрдлрд╕реЗрдЯ рдХреИрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рдХрдИ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╢рд░реАрд░ рдореЗрдВ рдбреЗрдЯрд╛ рд╕рдВрдЪрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:
 { data:[ {id:1, name:"Alex", role:"admin"}, {id:2, name:"Dmitry", role:"guest"} ], meta:{ total:2, offset:0, limit:10 } } 

рдХреНрд▓рд╛рдЗрдВрдЯ рдХреА рддрд░рдл, рдореИрдВрдиреЗ AngularJS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдЗрд╕рдореЗрдВ $resource рддрдВрддреНрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдореБрдЭреЗ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд▓рдЧрд╛ред рдореИрдВ рдЗрд╕рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рддрд▓реНрд▓реАрди рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд░рд╛рдорджрд╛рдпрдХ рдмрд┐рдирд╛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕реНрд╡рдЪреНрдЫ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЪрдпрдирд┐рдд рд░рд┐рдХреЙрд░реНрдб рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдбреЗрдЯрд╛ рд╣реЗрдбрд░ рдореЗрдВ рд▓реЗ рдЬрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛:
GET: roles?limit=5
Content-Range:items 0-4/10 - 0 4, 10.

рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдЙрдкрд░реЛрдХреНрдд рд╢реАрд░реНрд╖рдХ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ 4 рд░рд┐рдХреЙрд░реНрдб рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рд╣реБрдП рдереЗ, рд▓реЗрдХрд┐рди 5 (рд╢реВрдиреНрдп-рдЖрдзрд╛рд░рд┐рдд)ред рдпрд╛рдиреА рд╕рднреА 10 рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдБ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░, рд╢реАрд░реНрд╖рдХ рдлреЙрд░реНрдо рд▓реЗрдЧрд╛:
Content-Range:items 0-9/10 - 0 9 10.

рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╣реЗрдбрд░ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдмреЙрдбреА рдЕрдм "рдЕрддрд┐рд░рд┐рдХреНрдд" рдбреЗрдЯрд╛ рд╕реЗ рднрд░рд╛ рдирд╣реАрдВ рд╣реИред

рд╕рд░реНрд╡рд░ рдкрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред


рдкрд╣рд▓рд╛ рдХрджрдо рдПрдХ рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рдирд╛ рд╣реИред рдмреЗрд╢рдХ, рдпрд╣ рдПрдХ рдЕрдирд┐рд╡рд╛рд░реНрдп рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореЙрдбреНрдпреВрд▓ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЙрдкрдпреБрдХреНрдд рд╣реИред рдЖрдк рдореЙрдбреНрдпреВрд▓ рдирд╛рдо рдореЗрдВ рдПрдХ рдПрдкреАрдЖрдИ рд╕рдВрд╕реНрдХрд░рдг рднреА рд╢рд╛рдорд┐рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдЧрд▓рд╛, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ, url рдФрд░ рдЕрдиреБрд░реЛрдз рд╡рд┐рдзрд┐ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЙрдЪрд┐рдд рд░реВрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдирд┐рдпрдо рдЬреЛрдбрд╝реЗрдВ:

  array('api/<controller>/list', 'pattern'=>'api/<controller:\w+>', 'verb'=>'GET'), array('api/<controller>/view', 'pattern'=>'api/<controller:\w+>/<id:\d+>', 'verb'=>'GET'), array('api/<controller>/create', 'pattern'=>'api/<controller:\w+>', 'verb'=>'POST'), array('api/<controller>/update', 'pattern'=>'api/<controller:\w+>/<id:\d+>', 'verb'=>'PUT'), array('api/<controller>/update', 'pattern'=>'api/<controller:\w+>', 'verb'=>'PUT'), array('api/<controller>/delete', 'pattern'=>'api/<controller:\w+>/<id:\d+>', 'verb'=>'DELETE'), array('api/<controller>/delete', 'pattern'=>'api/<controller:\w+>', 'verb'=>'DELETE'), 

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдРрд╕реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рд░реВрдкрд░реЗрдЦрд╛ рд╕реЗ рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ, рд╕рдордЭрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред
рдЗрд╕рдХреЗ рдмрд╛рдж, ApiController.php , Controller.php ApiRelationProvider.php рдФрд░ ApiRelationProvider.php рдХрд┐рд╕реА рднреА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХреЗ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВред

рдПрдкреАрдЖрдИ рдореЙрдбреНрдпреВрд▓ рдирд┐рдпрдВрддреНрд░рдХ


рд╕рднреА API рдореЙрдбреНрдпреВрд▓ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреЛ ApiController рдХреНрд▓рд╛рд╕ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рд░рд╛рдЙрдЯрд░ рдХреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕реЗ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдзрд┐рдпреЛрдВ ( actions ) рдХреЛ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:
actionView() - рд░рд┐рдХреЙрд░реНрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛
actionList() - рд░рд┐рдХреЙрд░реНрдб рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛
actionCreate() - рдПрдХ рд░рд┐рдХреЙрд░реНрдб рдмрдирд╛рдПрдБ
actionUpdate() - рд░рд┐рдХреЙрд░реНрдб рдкрд░рд┐рд╡рд░реНрддрди
actionDelete() - рдПрдХ рд░рд┐рдХреЙрд░реНрдб рд╣рдЯрд╛рдПрдВ

рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рднреВрдорд┐рдХрд╛ рдирд┐рдпрдВрддреНрд░рдХ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдХрд╣рд╛ рдерд╛, RBAC рдлреНрд░реЗрдорд╡рд░реНрдХ рдореИрдХреЗрдирд┐рдЬрд╝реНрдо рд╕рднреА рд╕рдВрд╕реНрдерд╛рдУрдВ (рднреВрдорд┐рдХрд╛рдУрдВ, рд╕рдВрдЪрд╛рд▓рди рдФрд░ рдХрд╛рд░реНрдпреЛрдВ) рдХреЛ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ ( authitem ) рдореЗрдВ authitem ред рдЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ type рдЭрдВрдбреЗ рд╕реЗ рдЗрдХрд╛рдИ рдХрд╛ рдкреНрд░рдХрд╛рд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╛рдиреА RolesController , RolesController , TasksController рдХреЛ рдПрдХ рдореЙрдбрд▓ ( AuthItems ) рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдЙрдирдХрд╛ рджрд╛рдпрд░рд╛ рдХреЗрд╡рд▓ рдЙрди рд░рд┐рдХреЙрд░реНрдбреНрд╕ рддрдХ рд╕реАрдорд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рдЗрд╕реА type рдореВрд▓реНрдп рд╣реИред

рдирд┐рдпрдВрддреНрд░рдХ рдХреЛрдб:
 class RolesController extends ApiController { public function __construct($id, $module = null) { $this->model = new AuthItem('read'); $this->baseCriteria = new CDbCriteria(); $this->baseCriteria->addCondition('type='.AuthItem::ROLE_TYPE); parent::__construct($id, $module); } public function actionView(){ if(!Yii::app()->user->checkAccess('getRole')){ $this->accessDenied(); } $this->getView(); } public function actionList(){ if(!Yii::app()->user->checkAccess('getRole')){ $this->accessDenied(); } $this->getList(); } public function actionCreate(){ if(!Yii::app()->user->checkAccess('createRole')){ $this->accessDenied(); } $this->model->setScenario('create'); $this->priorityData = array('type'=>AuthItem::ROLE_TYPE); $this->create(); } public function actionUpdate( ){ if(!Yii::app()->user->checkAccess('updateRole')){ $this->accessDenied(); } $this->model->setScenario('update'); $this->priorityData = array('type'=>AuthItem::ROLE_TYPE); $this->update(); } public function actionDelete( ){ if(!Yii::app()->user->checkAccess('deleteRole')){ $this->accessDenied(); } $this->model->setScenario('delete'); $this->delete(); } public function getRelations() { return array( 'roleoperations'=>array( 'relationName'=>'operations', 'columnName'=>'operations', 'return'=>'array' ) ); } } 


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╡рд┐рдзрд┐ рдореЗрдВ, рдЙрд╕ рдореЙрдбрд▓ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдирд┐рдпрдВрддреНрд░рдХ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ model рд╕рдВрдкрддреНрддрд┐ рдХреЗ model рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИред

baseCriteria рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдХреЗ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╢рд░реНрдд рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реБрдП ( addCondition('type='.AuthItem::ROLE_TYPE) ), рд╣рдо рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рд╕реА рднреА рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╢рд░реНрдд рдкреВрд░реА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ, рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдФрд░ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд┐рдХреЙрд░реНрдб рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╕рдордп, рд╕реНрдерд┐рддрд┐ type=2 рдореЗрд▓ рдЦрд╛рдиреЗ рд╡рд╛рд▓реЗ рд░рд┐рдХреЙрд░реНрдб type=2 рдФрд░ рднрд▓реЗ рд╣реА рд╡рд╛рдВрдЫрд┐рдд id рдорд╛рди рд╡рд╛рд▓рд╛ рд░рд┐рдХреЙрд░реНрдб рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдореМрдЬреВрдж рд╣реЛ, рд▓реЗрдХрд┐рди baseCriteria рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ type рд╕реЗ рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИ baseCriteria рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ 404 рддреНрд░реБрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧреАред

actionCreate() рд╡рд┐рдзрд┐ priorityData рдбреЗрдЯрд╛ рдХреА рдХреАрдордд actionCreate() рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреА рд╣реИ, рдЬреЛ рдбреЗрдЯрд╛ рд╕реЗрдЯ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреА рд╣реИ рдЬреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдЕрдиреБрд░реЛрдз рдмреЙрдбреА рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд┐рд╕реА рднреА рдбреЗрдЯрд╛ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░реЗрдЧрд╛ред рдпрд╣реА рд╣реИ, рднрд▓реЗ рд╣реА рдЧреНрд░рд╛рд╣рдХ рдиреЗ рдЕрдиреБрд░реЛрдз рдирд┐рдХрд╛рдп рдореЗрдВ type рд╕рдВрдкрддреНрддрд┐ рдХреЛ 42 рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рд╣реЛ, рдлрд┐рд░ рднреА рдЗрд╕реЗ рдорд╛рди рдХреЛ рдкреБрди: рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ AuthItem::ROLE_TYPE (2) рдФрд░ рднреВрдорд┐рдХрд╛ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреЛрдИ рдЗрдХрд╛рдИ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдЧрд╛ред

рдХрд┐рд╕реА рднреА рдСрдкрд░реЗрд╢рди рдХреЛ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП checkAccess() рд╡рд┐рдзрд┐ рдФрд░ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХрд┐рд╕реА рднреА рдорд╛рдиреНрдпрддрд╛ рдирд┐рдпрдореЛрдВ рдпрд╛ рдЯреНрд░рд┐рдЧрд░реНрд╕ рдХреЛ рдкрд░рд┐рджреГрд╢реНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдореЙрдбрд▓ рддрд░реНрдХ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╕рднреА рдХреНрд░рд┐рдпрд╛ рд╡рд┐рдзрд┐рдпрд╛рдБ ( getView() , getList() , create() , update() , delete() ) рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдбреЗрдЯрд╛ рднреЗрдЬреЗрдВ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░реЗрдВред рдкрд╣рд▓рд╛ рдкреИрд░рд╛рдореАрдЯрд░ false рд╣реЛрдиреЗ рдкрд░, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдБ рдПрдХ рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╛рдкрд╕ рдЖрдПрдВрдЧреАред рдпрд╣ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдЖрдкрдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рднреЗрдЬрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдореЙрдбрд▓ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдореЗрдВ рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ (рдкрд╛рд╕рд╡рд░реНрдб рдЖрджрд┐) рдХреЛ рд╕рд╛рдлрд╝ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╕реНрдерд┐рддрд┐ рдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рд╡рд┐рдзрд┐ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рднрд░рд╛ рдЬрд╛рдПрдЧрд╛ред

рдЕрдВрддрд┐рдо рдирд┐рдпрдВрддреНрд░рдХ рд╡рд┐рдзрд┐ getRelations() рдХрд╛ рдЙрдкрдпреЛрдЧ рдореЙрдбрд▓ рд╕рдВрдмрдВрдзреЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд┐рдзрд┐ рдХреЛ рд░рд┐рд╢реНрддреЛрдВ рдХреЗ рд╕реЗрдЯ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реБрдП рдПрдХ рд╕рд░рдгреА рд╡рд╛рдкрд╕ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, ...?with=roleoperations url рдореЗрдВ ...?with=roleoperations рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ ...?with=roleoperations , рд╣рдо рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ, рд╕рд╛рде рд╣реА рд╕рд╛рде рд░реЛрд▓ рдбреЗрдЯрд╛, рдЗрд╕рдХреЗ рд▓рд┐рдП рджрд┐рдП рдЧрдП рд╕рднреА рдСрдкрд░реЗрд╢рди:
 { bizrule: null description: "Administrator" id: "1" name: "admin" operations: [{...}, {...},...] type: "2" } 

getRelations() рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рд╕рд░рдгреА рдореЗрдВ, рд╕рд░рдгреА рдХреБрдВрдЬреА рдЙрд╕ рд▓рд┐рдВрдХ рдХрд╛ рдирд╛рдо рд╣реИ рдЬреЛ GET рдкреИрд░рд╛рдореАрдЯрд░ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, roleoperations ) рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИред
рдХрдиреЗрдХреНрд╢рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рд░рдгреА рдХреЗ рддрддреНрд╡реЛрдВ рдХрд╛ рдореВрд▓реНрдп:
relationName
string
рдореЙрдбрд▓ рдореЗрдВ рд▓рд┐рдВрдХ рдХрд╛ рдирд╛рдоред рдпрджрд┐ рдореЙрдбрд▓ рдХрд╛ рд╕рдореНрдорд╛рди рд╕реЗ рдХреЛрдИ рд╕рдВрдмрдВрдз рдирд╣реАрдВ рд╣реИред рдврд╛рдВрдЪрд╛ рддрдВрддреНрд░ рдЙрд╕ рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрдкрддреНрддрд┐ get рдХрд░рдиреЗ рдпрд╛ рдЗрд╕реЗ get рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдХреЗ рд╡рд┐рдзрд┐ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЙрдбрд▓ рд╡рд┐рдзрд┐ рдПрдХ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддреА рд╣реИ: рдЗрд╕рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, possibleValues getPossibleValues() рдФрд░ рдореЙрдбрд▓ рдореЗрдВ рдПрдХ getPossibleValues() рд╡рд┐рдзрд┐ рдмрдирд╛рдПрдВ рдЬреЛ рдбреЗрдЯрд╛ рдХреА рдПрдХ рд╕рд░рдгреА рджреЗрддрд╛ рд╣реИред
columnName
string
рдЙрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдирд╛рдо рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдкрд╛рдпрд╛ рдЧрдпрд╛ рд░рд┐рдХреЙрд░реНрдб рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ред
return
string ('array' | 'object')
рдСрдмреНрдЬреЗрдХреНрдЯ (рдореЙрдбрд▓) рдпрд╛ рдорд╛рдиреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рд▓реМрдЯреЗрдВред


рдореБрдЭреЗ рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдирд┐рдпрдВрддреНрд░рдХ рдКрдкрд░ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рд╕рд░рд▓ рджрд┐рдЦрддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
 <?php class TagController extends ApiController { public function __construct($id, $module = null) { $this->model = new Tag('read'); parent::__construct($id, $module); } public function actionView(){ $this->getView(); } public function actionList(){ $this->getList(); } public function actionCreate(){ if(!Yii::app()->user->checkAccess('createTag')){ $this->accessDenied(); } $this->create(); } public function actionUpdate(){ if(!Yii::app()->user->checkAccess('updateTag')){ $this->accessDenied(); } $this->update(); } public function actionDelete(){ if(!Yii::app()->user->checkAccess('deleteTag')){ $this->accessDenied(); } $this->delete(); } } 


ApiController рд╡рд░реНрдЧ рдХрд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд┐рд╡рд░рдг:

рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ:
рд╕рдВрдкрддреНрддрд┐
рдЯрд╛рдЗрдк
рд╡рд┐рд╡рд░рдг
data
рд╕рд░рдгреА
рдЕрдиреБрд░реЛрдз рдирд┐рдХрд╛рдп рд╕реЗ рдбреЗрдЯрд╛ред Content-Type: x-www-form-urlencoded рдФрд░ Content-Type: x-www-form-urlencoded рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЗ рдбреЗрдЯрд╛ Content-Type: application/json рд╕рд░рдгреА рдореЗрдВ рдорд┐рд▓ рдЬрд╛рдПрдЧрд╛
priorityData
рд╕рд░рдгреА
рдбреЗрдЯрд╛ рдирд┐рд░реНрдорд╛рдг рдФрд░ рд╕рдВрд╢реЛрдзрди рд╕рдВрдЪрд╛рд▓рди рдХрд░рддреЗ рд╕рдордп рдЕрдиреБрд░реЛрдз рдбреЗрдЯрд╛ (рдбреЗрдЯрд╛) рд╕реЗ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдпрд╛ рдкреВрд░рдХ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
model
CActiveRecord
рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдореЙрдбрд▓ рдЙрджрд╛рд╣рд░рдгред
statusCode
рдкреВрд░реНрдгрд╛рдВрдХ
рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛрдбред рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдп 200 ред
criteriaParams
рд╕рд░рдгреА
рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЪрдпрди рдкреИрд░рд╛рдореАрдЯрд░ ( limit , offset , order )ред GET рдЕрдиреБрд░реЛрдз рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдорд╛рди рд╕рд░рдгреА рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдорд╛рди рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддреЗ рд╣реИрдВред
рдореВрд▓ рдореВрд▓реНрдп:
 array( 'limit' => 100, 'offset' => 0, 'order' => 'id ASC' ) 

contentRange
рд╕рд░рдгреА
рдЪрдпрдирд┐рдд рд░рд┐рдХреЙрд░реНрдб рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдбреЗрдЯрд╛ред рдПрдХ рдЙрджрд╛рд╣рд░рдг:
 array( 'total'=>10, 'start'=>6, 'end'=>15 ) 

sendToEndUser
рдмреВрд▓рд┐рдпрди
рдСрдкрд░реЗрд╢рди рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдбреЗрдЯрд╛ рднреЗрдЬрдирд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ (рд╡реНрдпреВ, рдХреНрд░рд┐рдПрдЯ, рдореЙрдбрд┐рдлрд╛рдИ, рдбрд┐рд▓реАрдЯ рдХрд░реЗрдВ) рдпрд╛ рдРрд░реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХреНрд╢рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд▓реМрдЯрд╛рдПрдБред
criteria
CDbCriteria
рдбреЗрдЯрд╛ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП CDbCriteria рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдгред рдпрд╣ рдЕрдиреБрд░реЛрдз (рд╕реАрдорд╛, рдСрдлрд╕реЗрдЯ, рдЖрджреЗрд╢, рдлрд╝рд┐рд▓реНрдЯрд░, рдЦреЛрдЬ, рдЖрджрд┐) рдХреЗ рдбреЗрдЯрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
baseCriteria
CDbCriteria
рдбреЗрдЯрд╛ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП CDbCriteria рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЖрдзрд╛рд░ рдЙрджрд╛рд╣рд░рдгред criteria рд╢рд░реНрддреЛрдВ рдкрд░ рд╡рд╕реНрддреБ рд╕реНрдерд┐рддрд┐ рдкреВрд░реНрд╡рддрд╛ рд▓реЗрддреА рд╣реИред
notFoundErrorResponse
рд╕рд░рдгреА
рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдирд╣реАрдВ рдорд┐рд▓рдиреЗ рдкрд░ рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ред

рд╡рд┐рдзрд┐:



рдкрд░реАрдХреНрд╖рдг


рдПрдкреАрдЖрдИ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдореБрджреНрджреЗ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рддреЗ рд╣реБрдП, рдореИрдВрдиреЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛ред рдЕрдзрд┐рдХрд╛рдВрд╢ рдиреЗ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреА, рд▓реЗрдХрд┐рди рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкрд░реАрдХреНрд╖рдгред рд▓реЗрдХрд┐рди рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдХрдИ рддрд░реАрдХреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА ( рд╕реЗрд▓реЗрдирд┐рдпрдо рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ PhantomJs рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ), рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рддрд░реАрдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕реЗрд▓реЗрдирд┐рдпрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдлрд╛рд░реНрдо рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕рдореЗрдВ рдЗрдирдкреБрдЯ рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдбреЗрдЯрд╛ рд╕реЗ рднрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕рдмрдорд┐рдЯ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдФрд░ рдлрд┐рд░ рд╕рд░реНрд╡рд░ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╣реБрдП рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖред рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕рд╛рд▓ рд▓рдЧреЗрдВрдЧреЗ!

рдЧрд╣рд░реА рдЦреЛрдЬреЛрдВ рдореЗрдВ рдбреВрдмрдиреЗ рдХреЗ рдмрд╛рдж, рдФрд░ рдЕрдиреНрдп рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдЕрдиреБрднрд╡ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдХрд░реНрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдкреАрдЖрдИ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд░реНрдЧ рд▓рд┐рдЦрд╛редрдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХрдХреНрд╖рд╛ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ ApiTestCaseрдФрд░ рдЙрд╕рдореЗрдВ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдПрдкреАрдЖрдИ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╕рдордп рдореБрдЭреЗ рдкрд╣рд▓реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рдерд╛ред рдкрд░реАрдХреНрд╖рдг рдХреЗ рджреМрд░рд╛рди, рдПрдХ рдкрд░реАрдХреНрд╖рдг рдЖрдзрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрд╣ рдирд┐рд░рдВрддрд░ рдирд┐рдЧрд░рд╛рдиреА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдЖрд░рдмреАрдПрд╕реА рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдореЗрдВ рд╣рдореЗрд╢рд╛ рдЕрдк-рдЯреВ-рдбреЗрдЯ рдбреЗрдЯрд╛ рд╣реЛрддрд╛ рд╣реИ, рдЕрдиреНрдпрдерд╛ рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдЗрдХрд╛рдИ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ {"error":{"access":"You do not have sufficient permissions to access."}}рдХреЛрдб 403 рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдорд┐рд▓ рд╕рдХрддреА рд╣реИ ред рдФрд░ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдкрдХреЛ рдкреНрд░рд╡реЗрд╢ рдкреНрд░рддрд┐рдмрдВрдз рдХреЗ рд╕рдорд╛рди рдХрд╛рд░рдг рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рд▓реЙрдЧ рдЗрди рдХрд░рдиреЗ рдФрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреБрдХреАрдЬрд╝ рднреЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдПрдкреАрдЖрдИ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдпрд╢реАрд▓ рдЖрдзрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ authManager, рдЬреЛ рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг рдХреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ (config / test.php) рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдХреЗ рдкрд╣реБрдВрдЪ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ:
 ... 'proddb'=>array( 'class'=>'CDbConnection', 'connectionString' => 'mysql:host=localhost;dbname=yiirestmodel', 'emulatePrepare' => true, 'username' => '', 'password' => '', 'charset' => 'utf8', ), //    'db'=>array( 'connectionString' => 'mysql:host=localhost;dbname=yiirestmodel-test', ), //    'authManager'=>array( 'connectionID'=>'proddb', //   ), ... 

рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рдПрдХрдорд╛рддреНрд░ рд╕реАрдорд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдЕрдзрд┐рдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдЖрдИрдбреА рдореВрд▓реНрдп рджреЛрдиреЛрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕рдорд╛рди рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рдЖрдкрдХрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╣реИ id=1рдФрд░ рдХрд╛рд░реНрдп рдкреНрд░рд╢рд╛рд╕рдХ рдХреА рднреВрдорд┐рдХрд╛ рдХреЛ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИ, id=42рддреЛ рдШрдЯрдХ рдРрд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдирд╣реАрдВ рдорд╛рдиреЗрдВрдЧреЗ!

рдкрд░реАрдХреНрд╖рдг рдЙрджрд╛рд╣рд░рдг:
 class UsersControllerTest extends ApiTestCase { public $fixtures = array( 'users'=>'User' ); public function testActionView(){ $user = $this->users('admin'); $response = $this->get('api/users/'.$user->id, array(), array('cookies'=>$this->getAuthCookies())); $this->assertEquals($response['code'], 200); $this->assertNotNull($response['decoded']); $this->assertEquals($response['decoded']['id'], $user->id); $this->assertArrayNotHasKey('password', $response['decoded']); $this->assertArrayNotHasKey('guid', $response['decoded']); } public function testActionList(){ $response = $this->get('api/users', array(), array('cookies'=>$this->getAuthCookies())); $this->assertEquals($response['code'], 200); $this->assertEquals(count($response['decoded']), User::model()->count()); } public function testActionCreate(){ $response = $this->post( 'api/users', array( 'first_name' => 'new_first_name', 'middle_name' => 'new_middle_name', 'last_name' => 'new_last_name', 'password' => 'new_user_psw', 'password_repeat' => 'new_user_psw', 'role' => 'guest', ), array('cookies'=>$this->getAuthCookies()) ); $this->assertEquals($response['code'], 200); $this->assertNotNull($response['decoded']); $this->assertArrayHasKey('id', $response['decoded']); $this->assertArrayNotHasKey('password', $response['decoded']); $this->assertNotNull( User::model()->findByPk($response['decoded']['id']) ); } } 


рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╣рдо рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд рдЬреБрдбрд╝рдирд╛рд░ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВред рдЕрдЧрд▓рд╛, рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдзрд┐ рдореЗрдВ, рд╣рдо рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ ApiTestCase::get()(GET рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ) рдЗрд╕рдореЗрдВ url рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреБрдХреАрдЬрд╝ ApiTestCase::getAuthCookies()ред рдЗрди рдХреБрдХреАрдЬрд╝ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ $loginUrlрдФрд░ $loginDataред рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рдХрдХреНрд╖рд╛ рдореЗрдВ рд╕реАрдзреЗ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рд╣реИ ApiTestCaseрддрд╛рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧ рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рди рдХрд┐рдпрд╛ рдЬрд╛рдП:
 public $loginUrl = 'api/login'; public $loginData = array('login'=>'admin', 'password'=>'admin'); 

рдореБрдЭреЗ рдпрд╣ рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ ApiTestCase::getAuthCookies()рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдХреИрд╢ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд┐ рдХрд╛рдлреА рд╕реНрдорд╛рд░реНрдЯ рд╣реИред рдЕрдиреБрд░реЛрдз рдХреЛ рдлрд┐рд░ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдкрд╣рд▓реЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ trueред

рд╡рд┐рдзрд┐ ApiTestCase :: get () (рдХреЗ рд░реВрдк рдореЗрдВ ApiTestCase::post(), ApiTestCase::put(), ApiTestCase::delete()) рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХреНрд╡реЗрд░реА рдбреЗрдЯрд╛ рдХреА рдПрдХ рд╕рд░рдгреА рджреЗрддрд╛ рд╣реИ:
body
рддрд╛рд░
рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛
code
рдкреВрд░реНрдгрд╛рдВрдХ
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛрдб
cookies
рд╕рд░рдгреА
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХреБрдХреАрдЬрд╝ рдХреА рд╕рд░рдгреА
headers
рд╕рд░рдгреА
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рд╣реЗрдбрд░ рдХреА рдПрдХ рд╕рд░рдгреА (рд╣реЗрдбрд░ рдирд╛рдо => рд╣реЗрдбрд░ рдорд╛рди)ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
 array( 'Date' => "Fri, 23 May 2014 12:10:37 GMT" 'Server' =>"Apache/2.4.7 (Win32) OpenSSL/1.0.1e PHP/5.5.9" ... ) 

decoded
рд╕рд░рдгреА
рдбреАрдХреЛрдб (json_decode) рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рд╕рд░рдгреА

рдпрд╣ рдбреЗрдЯрд╛ рд╕рд░реНрд╡рд░ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рдкреВрд░реНрдг рдкрд░реАрдХреНрд╖рдг рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред

рдЕрдиреБрд░реЛрдз рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╡рд┐рднрд┐рдиреНрди рдЖрд╡реЗрд╖рдг рдХреА рдЬрд╛рдВрдЪ рдХреА рдЬрд╛рддреА рд╣реИ, рдЬреЛ рдХрд╛рдлреА рд╕реНрдкрд╖реНрдЯ рд╣реИрдВ рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдмреЗрд╢рдХ, рдпрд╣ рдЗрдХрд╛рдИ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рдкрд░реАрдХреНрд╖рдг рдХреЛрдб рд╕реЗ рджреВрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдХрдХреНрд╖рд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ ApiTestCaseред

рд▓рдШреБ рд╡рд░реНрдЧ рд╡рд┐рд╡рд░рдг ApiTestCase:
рдЧреБрдг:
рд╕рдВрдкрддреНрддрд┐
рдЯрд╛рдЗрдк
рд╡рд┐рд╡рд░рдг
authCookies
рд╕рд░рдгреА
рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рдмрд╛рдж рдкреНрд░рд╛рдкреНрдд рдХреБрдХреАрдЬрд╝ (рд╡рд┐рдзрд┐ рдХреЙрд▓ ApiTestCase::getAuthCookies())
loginUrl
рддрд╛рд░
рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреБрдХреАрдЬрд╝ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдЕрдиреБрд░реЛрдз рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХрд╛ рдкрддрд╛ред
loginData
рд╕рд░рдгреА ()
рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдЕрдиреБрд░реЛрдз рдХреЗ рдирд┐рдХрд╛рдп рдореЗрдВ рджрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рд░рдгреАред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ:
 array('login'=>'admin', 'password'=>'admin'); 


рдореБрдЦреНрдп рд╡рд┐рдзрд┐рдпрд╛рдБ:


рдЬреАрдердм рд╕реЗ рд▓рд┐рдВрдХ рдХрд░реЗрдВред

рдирд┐рд╖реНрдХрд░реНрд╖


рдмреЗрд╢рдХ, рднрд╛рд░реА рднрд╛рд░ рдХреЗ рддрд╣рдд рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреИрджрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ActiveRecordред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╢рд┐рдВрдЧ рджреНрд╡рд╛рд░рд╛ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ Yii рдХреЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рдм рдХреБрдЫ рд╣реИ)ред
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдРрд╕реЗ рдбреЗрд╡рд▓рдкрд░ рд╣реИрдВ рдЬреЛ рдЗрд╕реЗ рдкреВрд░реЗ рд╡рд┐рд╕реНрддрд╛рд░ рдореЗрдВ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдпрд╛ рдлрд┐рд░ рдЗрд╕рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЙрдкрдпреЛрдЧреА рдкрд╛рдПрдВрдЧреЗред
рднрд╡рд┐рд╖реНрдп рдХреА рдпреЛрдЬрдирд╛рдПрдВ рдХрдИ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрдзрд╛рд░ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрди рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдХрд┐рд╕реА рднреА рдЯрд┐рдкреНрдкрдгреА рдФрд░ рд╕реБрдЭрд╛рд╡ рдХреЗ рд▓рд┐рдП рдЖрднрд╛рд░реА рд░рд╣реВрдВрдЧрд╛ред

рдкреБрдирд╢реНрдЪ


рд▓реЗрдЦ рдмрдбрд╝рд╛ рдирд┐рдХрд▓рд╛ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдХрд╛ рдЗрд░рд╛рджрд╛ рдХреНрдпрд╛ рдерд╛, рдЗрд╕рдХрд╛ рдЖрдзрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рдерд╛) рдФрд░ рдХреБрдЫ рд╣рдж рддрдХ рдлрдЯрд╛ рд╣реБрдЖ рдерд╛ред рдпрджрд┐ рдЬрд╛рдирдХрд╛рд░реА рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реИ, рддреЛ рдореИрдВ рдХреБрдЫ рдФрд░ рдмрд┐рдВрджреБрдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╕рдВрдЧреНрд░рд╣ рдкреНрд░рд╛рдкреНрдд рд╣реБрдП рдереЗ (рдПрдХ рдореЗрдВ рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рд╕рдВрдпреЛрдЬрди), рдЖрджрд┐ред рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рднреА рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдореИрдВрдиреЗ AngularJS рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб API рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдмрд╛рддрдЪреАрдд рдХреА рдФрд░ рдХреИрд╕реЗ рд╕рд░реНрдЪ рдЗрдВрдЬрди рдлреНрд░реЗрдВрдбрд▓реА рд╡рди-рдкреЗрдЬ рдПрдкреНрд▓рд┐рдХреЗрд╢рди (PhantomJs рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреЗрдЬ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде) рдмрдирд╛рдпрд╛ред

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


All Articles