рд╢рд╛рдпрдж рд▓реЗрдЦ рдХреА рддреИрдпрд╛рд░реА рдФрд░ рд▓реЗрдЦрди рдХреЗ рджреМрд░рд╛рди, рдпрд╣ рдПрдХ YEST2 рдХреА рд░рд┐рд▓реАрдЬ рдХреЗ рд╕рд╛рде рдЕрдкрдиреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХрддрд╛ рдЦреЛ рджрд┐рдпрд╛ рдЬрд┐рд╕рдореЗрдВ рдПрдХ RESTful рдПрдкреАрдЖрдИ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд░реВрдкрд░реЗрдЦрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд▓реЗрдЦ рдЕрднреА рднреА рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рдЬреЛ рдЕрднреА рддрдХ Yii2 рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рдпрд╛ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдиреНрд╣реЗрдВ рдореМрдЬреВрджрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг-рд╡рд┐рдХрд╕рд┐рдд рдПрдкреАрдЖрдИ рдХреЛ рдЬрд▓реНрджреА рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЖрдкрдХреЛ рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рджреВрдВрдЧрд╛, рдЬрд┐рдиреНрд╣реЗрдВ рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ:
- рдореИрдВрдиреЗ рдЬрд┐рди рдкрд╣рд▓реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕ рддрд░рд╣ рдХреЗ рд░рд┐рдХреЙрд░реНрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЗрд╡рд▓ рдореЙрдбрд▓ рдХреЗ рдирд╛рдо рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдВ ред рдЗрд╕ рддрд░рд╣ рдХреЗ рддрдВрддреНрд░ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ
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 -
рд╕рд╣рдордд рд╣реВрдВ, рджреВрд╕рд░рд╛ рд╡рд┐рдХрд▓реНрдк рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рдФрд░ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЙрд╕ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЗрд╕рдореЗрдВ рд░реВрдкрд░реЗрдЦрд╛ рдФрд░ рдЖрд░рдмреАрдПрд╕реА рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИред
- рджреВрд╕рд░рд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрд╡рд╕рд░ рдПрдХ рдбреЗрдЯрд╛ рдЦреЛрдЬ рдФрд░ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рддрдВрддреНрд░ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╢рд░реНрддреЛрдВ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдФрд░ рдирд┐рдпрдореЛрдВ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЗ рдПрдХ рдПрдирд╛рд▓реЙрдЧ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛:
SELECT * FROM users WHERE (age>25 AND first_name LIKE '%alex%') OR (last_name='shepard');
- рдХрднреА-рдХрднреА рдмрдирд╛рдиреЗ, рдЕрджреНрдпрддрди рдХрд░рдиреЗ, рд╕рдВрдЧреНрд░рд╣ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред рдпрд╛рдиреА рдЦреЛрдЬ рдФрд░ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдПрдХ рдХреНрд╡реЗрд░реА рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рдХреА nth рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдмрджрд▓рдирд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЕрдХреНрд╕рд░ рдХрд┐рд╕реА рднреА рд╣рд╛рд▓рдд рдореЗрдВ рдкрдбрд╝рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рд░рд┐рдХреЙрд░реНрдб рдХреЛ рд╣рдЯрд╛рдиреЗ рдпрд╛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рдорд╣рдВрдЧрд╛ рд╣реИред
- рдПрдХ рдЕрдиреНрдп рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ рд╕рдВрдмрдВрдзрд┐рдд рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдереАред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: рдЕрдкрдиреЗ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдЗрди рднреВрдорд┐рдХрд╛рдУрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред
- рдмреЗрд╢рдХ, рдкреНрд░рд╛рдкреНрдд рд░рд┐рдХреЙрд░реНрдб (
limit
) рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдиреЗ, рдЪрдпрди рдХреА рд╢реБрд░реБрдЖрдд рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ (offset
) рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛, рдФрд░ рд░рд┐рдХреЙрд░реНрдб рдХреЗ рдХреНрд░рдо рдХреЛ рдХреНрд░рдордмрджреНрдз (order by
) рдХреЗ рдмрд┐рдирд╛ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдХрдо рд╕реЗ рдХрдо рдХрд┐рд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред рд╕рдореВрд╣ (group by
) рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рднреА рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред
- рдкреНрд░рддреНрдпреЗрдХ рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ (
checkAccess
рд╡рд┐рдзрд┐ рдЕрднреА рднреА рдЙрд╕реАcheckAccess
рдореЗрдВ рд╣реИ)ред
- рдФрд░ рдЕрдВрдд рдореЗрдВ, рдкреВрд░реЗ рдорд╛рдорд▓реЗ рдХреЛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
"рд╡рд┐рд╢рд▓рд┐рд╕реНрдЯ" рдХреА рд▓рдЧрднрдЧ рдРрд╕реА рд╕реВрдЪреА рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЗрд╕ рдЕрджреНрднреБрдд рд░реВрдкрд░реЗрдЦрд╛ рдкрд░ рдПрдкреАрдЖрдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдореЗрд░рд╛ рд╕рдВрд╕реНрдХрд░рдг рдкреИрджрд╛ рд╣реБрдЖ рдерд╛!
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, 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 рдЕрдиреБрд░реЛрдз рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдорд╛рди рд╕рд░рдгреА рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдорд╛рди рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддреЗ рд╣реИрдВред рдореВрд▓ рдореВрд▓реНрдп:
|
contentRange
| рд╕рд░рдгреА
| рдЪрдпрдирд┐рдд рд░рд┐рдХреЙрд░реНрдб рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдбреЗрдЯрд╛ред рдПрдХ рдЙрджрд╛рд╣рд░рдг:
|
sendToEndUser
| рдмреВрд▓рд┐рдпрди
| рдСрдкрд░реЗрд╢рди рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдбреЗрдЯрд╛ рднреЗрдЬрдирд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ (рд╡реНрдпреВ, рдХреНрд░рд┐рдПрдЯ, рдореЙрдбрд┐рдлрд╛рдИ, рдбрд┐рд▓реАрдЯ рдХрд░реЗрдВ) рдпрд╛ рдРрд░реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХреНрд╢рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд▓реМрдЯрд╛рдПрдБред
|
criteria
| CDbCriteria
| рдбреЗрдЯрд╛ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП CDbCriteria
рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдгред рдпрд╣ рдЕрдиреБрд░реЛрдз (рд╕реАрдорд╛, рдСрдлрд╕реЗрдЯ, рдЖрджреЗрд╢, рдлрд╝рд┐рд▓реНрдЯрд░, рдЦреЛрдЬ, рдЖрджрд┐) рдХреЗ рдбреЗрдЯрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ |
baseCriteria
| CDbCriteria
| рдбреЗрдЯрд╛ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП CDbCriteria
рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЖрдзрд╛рд░ рдЙрджрд╛рд╣рд░рдгред criteria
рд╢рд░реНрддреЛрдВ рдкрд░ рд╡рд╕реНрддреБ рд╕реНрдерд┐рддрд┐ рдкреВрд░реНрд╡рддрд╛ рд▓реЗрддреА рд╣реИред |
notFoundErrorResponse
| рд╕рд░рдгреА
| рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдирд╣реАрдВ рдорд┐рд▓рдиреЗ рдкрд░ рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ред
|
рд╡рд┐рдзрд┐:
- getView ()
рдЬреАрдИрдЯреА рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдПрдХ рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП рдЦреЛрдЬ рдХрд░рддрд╛ рд╣реИред рд▓рд┐рдЦрдиреЗ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рджреЗрддрд╛ рд╣реИ рдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдбреЗрдЯрд╛ рднреЗрдЬрддрд╛ рд╣реИред рдпрджрд┐ рд░рд┐рдХреЙрд░реНрдб рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИ, рддреЛ рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ 404 рдХреЗ рдЬрд╡рд╛рдм рдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рднреЗрдЬрддрд╛ рд╣реИ рдпрд╛ рд╕рдВрдмрдВрдзрд┐рдд рддреНрд░реБрдЯрд┐ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рдгреА рджреЗрддрд╛ рд╣реИред рдЕрдиреБрд░реЛрдз рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЙрдЪрд┐рдд рдорд╛рди рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рддрд┐statusCode
рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред
getView(boolean $sendToEndUser = true, integer $id)
$ SendToEndUser
рдмреВрд▓рд┐рдпрди
рдСрдкрд░реЗрд╢рди рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдбреЗрдЯрд╛ рднреЗрдЬрдирд╛ рд╣реИ рдпрд╛ рдПрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реИред
$ рдЖрдИ.рдбреА.
рдкреВрд░реНрдгрд╛рдВрдХ
рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХрд╛ рдЖрдИрдбреА рдкреИрд░рд╛рдореАрдЯрд░ред рдпрджрд┐ рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ, рддреЛ рдпрд╣ рдЬреАрдИрдЯреА рдорд╛рдкрджрдВрдбреЛрдВ рд╕реЗ рдЖрдмрд╛рджреА рд╣реИред
- GetList ()
рдЬреАрдИрдЯреА рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд░рд┐рдХреЙрд░реНрдб рдХреА рдЦреЛрдЬ рдХрд░рддрд╛ рд╣реИред рдкрд╛рдпрд╛ рдЕрднрд┐рд▓реЗрдЦреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдпрд╛ рдПрдХ рдЦрд╛рд▓реА рд╕рд░рдгреА рджреЗрддрд╛ рд╣реИред
getList(boolean $sendToEndUser = true)
$ SendToEndUser
рдмреВрд▓рд┐рдпрди
рдСрдкрд░реЗрд╢рди рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдбреЗрдЯрд╛ рднреЗрдЬрдирд╛ рд╣реИ рдпрд╛ рдПрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реИред
- рдмрдирд╛рдПрдВ ()
рдЕрдиреБрд░реЛрдз рдирд┐рдХрд╛рдп рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рд░рд┐рдХреЙрд░реНрдб рдмрдирд╛рддрд╛ рд╣реИред рдпрджрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдПрдХ рд╕рд░рдгреА рдЕрдиреБрд░реЛрдз рдирд┐рдХрд╛рдп рдореЗрдВ рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рдВрдмрдВрдзрд┐рдд рд░рд┐рдХреЙрд░реНрдб рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд╣рдЪрд╛рдиреА рдЬрд╛рдПрдЧреАред рдирдП рд░рд┐рдХреЙрд░реНрдб рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рдгреА рджреЗрддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
array( 'name'=>'Alex', 'age'=>'25' ) // .
array( array( 'name'=>'Alex', 'age'=>'25' ), array( 'name'=>'Dmitry', 'age'=>'33' ) ) // .
create(boolean $sendToEndUser = true)
$ SendToEndUser
рдмреВрд▓рд┐рдпрди
рдСрдкрд░реЗрд╢рди рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдбреЗрдЯрд╛ рднреЗрдЬрдирд╛ рд╣реИ рдпрд╛ рдПрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реИред
- рдЕрджреНрдпрддрди ()
рдкреНрд░рд╛рдкреНрдд рдЬреАрдИрдЯреА рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдкреНрд░рд╛рдкреНрдд рд░рд┐рдХреЙрд░реНрдб рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИред рд▓рд┐рдЦрдиреЗ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рджреЗрддрд╛ рд╣реИ рдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдбреЗрдЯрд╛ рднреЗрдЬрддрд╛ рд╣реИред рдпрджрд┐ рд░рд┐рдХреЙрд░реНрдб рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИ, рддреЛ рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ 404 рдХреЗ рдЬрд╡рд╛рдм рдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рднреЗрдЬрддрд╛ рд╣реИ рдпрд╛ рд╕рдВрдмрдВрдзрд┐рдд рддреНрд░реБрдЯрд┐ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рдгреА рджреЗрддрд╛ рд╣реИред рдпрджрд┐ рдЕрднрд┐рд▓реЗрдЦреЛрдВ рдХрд╛ рдПрдХ рд╕рд░рдгреА рдЕрдиреБрд░реЛрдз рдирд┐рдХрд╛рдп рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд░рд┐рдХреЙрд░реНрдб рдХреА рд╕рдВрдЦреНрдпрд╛ рдмрджрд▓ рдЬрд╛рдПрдЧреА рдФрд░ рдЙрдирдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рдгреА рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧреАред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
PUT: users/1
array( 'name'=>'Alex', 'age'=>'25' ) // GET
PUT: users
array( array( 'id'=>1, 'name'=>'Alex', 'age'=>'25' ), array( 'id'=>2, 'name'=>'Dmitry', 'age'=>'33' ) ) // id . url
update(boolean $sendToEndUser = true, integer $id)
$ SendToEndUser
рдмреВрд▓рд┐рдпрди
рдСрдкрд░реЗрд╢рди рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдбреЗрдЯрд╛ рднреЗрдЬрдирд╛ рд╣реИ рдпрд╛ рдПрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реИред
$ рдЖрдИ.рдбреА.
рдкреВрд░реНрдгрд╛рдВрдХ
рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХрд╛ рдЖрдИрдбреА рдкреИрд░рд╛рдореАрдЯрд░ред рдпрджрд┐ рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ, рддреЛ рдпрд╣ рдЬреАрдИрдЯреА рдорд╛рдкрджрдВрдбреЛрдВ рд╕реЗ рдЖрдмрд╛рджреА рд╣реИред
- рд╣рдЯрд╛рдирд╛ ()
рдкреНрд░рд╛рдкреНрдд рдЬреАрдИрдЯреА рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдкрд╛рдпрд╛ рдЧрдпрд╛ рд░рд┐рдХреЙрд░реНрдб рд╣рдЯрд╛рддрд╛ рд╣реИред рджреВрд░рд╕реНрде рд░рд┐рдХреЙрд░реНрдб рдкреИрд░рд╛рдореАрдЯрд░ рдХреА рдПрдХ рд╕рд░рдгреА рджреЗрддрд╛ рд╣реИ рдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдбреЗрдЯрд╛ рднреЗрдЬрддрд╛ рд╣реИред рдпрджрд┐ рд░рд┐рдХреЙрд░реНрдб рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИ, рддреЛ рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ 404 рдХреЗ рдЬрд╡рд╛рдм рдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рднреЗрдЬрддрд╛ рд╣реИ рдпрд╛ рд╕рдВрдмрдВрдзрд┐рдд рддреНрд░реБрдЯрд┐ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рдгреА рджреЗрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдИрдбреА рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╕рднреА рд░рд┐рдХреЙрд░реНрдб рд╣рдЯрд╛ рджрд┐рдП рдЬрд╛рдПрдВрдЧреЗред
delete(boolean $sendToEndUser = true, integer $id)
$ SendToEndUser
рдмреВрд▓рд┐рдпрди
рдСрдкрд░реЗрд╢рди рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдбреЗрдЯрд╛ рднреЗрдЬрдирд╛ рд╣реИ рдпрд╛ рдПрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реИред
$ рдЖрдИ.рдбреА.
рдкреВрд░реНрдгрд╛рдВрдХ
рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХрд╛ рдЖрдИрдбреА рдкреИрд░рд╛рдореАрдЯрд░ред рдпрджрд┐ рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ, рддреЛ рдпрд╣ рдЬреАрдИрдЯреА рдорд╛рдкрджрдВрдбреЛрдВ рд╕реЗ рдЖрдмрд╛рджреА рд╣реИред
рдкрд░реАрдХреНрд╖рдг
рдПрдкреАрдЖрдИ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдореБрджреНрджреЗ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рддреЗ рд╣реБрдП, рдореИрдВрдиреЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛ред рдЕрдзрд┐рдХрд╛рдВрд╢ рдиреЗ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреА, рд▓реЗрдХрд┐рди рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкрд░реАрдХреНрд╖рдгред рд▓реЗрдХрд┐рди рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдХрдИ рддрд░реАрдХреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА ( рд╕реЗрд▓реЗрдирд┐рдпрдо рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ 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
| рд╕рд░рдгреА
| рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рд╣реЗрдбрд░ рдХреА рдПрдХ рд╕рд░рдгреА (рд╣реЗрдбрд░ рдирд╛рдо => рд╣реЗрдбрд░ рдорд╛рди)ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
| ||
decoded
| рд╕рд░рдгреА
| рдбреАрдХреЛрдб (json_decode) рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рд╕рд░рдгреА
|
рдпрд╣ рдбреЗрдЯрд╛ рд╕рд░реНрд╡рд░ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рдкреВрд░реНрдг рдкрд░реАрдХреНрд╖рдг рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред
рдЕрдиреБрд░реЛрдз рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╡рд┐рднрд┐рдиреНрди рдЖрд╡реЗрд╖рдг рдХреА рдЬрд╛рдВрдЪ рдХреА рдЬрд╛рддреА рд╣реИ, рдЬреЛ рдХрд╛рдлреА рд╕реНрдкрд╖реНрдЯ рд╣реИрдВ рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдмреЗрд╢рдХ, рдпрд╣ рдЗрдХрд╛рдИ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рдкрд░реАрдХреНрд╖рдг рдХреЛрдб рд╕реЗ рджреВрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдХрдХреНрд╖рд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ
ApiTestCase
ред
рд▓рдШреБ рд╡рд░реНрдЧ рд╡рд┐рд╡рд░рдг
ApiTestCase
:
рдЧреБрдг:
рд╕рдВрдкрддреНрддрд┐
| рдЯрд╛рдЗрдк
| рд╡рд┐рд╡рд░рдг
|
---|---|---|
authCookies
| рд╕рд░рдгреА
| рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рдмрд╛рдж рдкреНрд░рд╛рдкреНрдд рдХреБрдХреАрдЬрд╝ (рд╡рд┐рдзрд┐ рдХреЙрд▓ ApiTestCase::getAuthCookies()
) |
loginUrl
| рддрд╛рд░
| рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреБрдХреАрдЬрд╝ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдЕрдиреБрд░реЛрдз рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХрд╛ рдкрддрд╛ред
|
loginData
| рд╕рд░рдгреА ()
| рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдЕрдиреБрд░реЛрдз рдХреЗ рдирд┐рдХрд╛рдп рдореЗрдВ рджрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рд░рдгреАред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ:
|
рдореБрдЦреНрдп рд╡рд┐рдзрд┐рдпрд╛рдБ:
- getAuthCookies ()
рдПрдХ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдЕрдиреБрд░реЛрдз рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рдХрд░рддрд╛ рд╣реИред
getAuthCookies(boolean $reload = false)
$ рдкреБрдирдГ рд▓реЛрдб
рдмреВрд▓рд┐рдпрди
.
- get()
GET. .
get( string $url, array $params = array(), array $options = array()){
$url
string
Url
$params
array
GET
$options
array
, curl_setopt_array
.cookies
, (=>) .
- post()
POST. .
post( string $url, array $params = array(), array $options = array()){
$url
string
Url
$params
array
$options
array
, curl_setopt_array
.cookies
, (=>) .
- put ()
PUT рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдиреБрд░реЛрдз рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИред рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рдгреА рджреЗрддрд╛ рд╣реИред
рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг ApiTestCase :: post () рджреЗрдЦреЗрдВ
- рд╣рдЯрд╛рдПрдВ ()
DELETE рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдХреНрд╡реЗрд░реА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВред рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рдгреА рджреЗрддрд╛ рд╣реИред
рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг ApiTestCase :: post () рджреЗрдЦреЗрдВ
рдЬреАрдердм рд╕реЗ рд▓рд┐рдВрдХ рдХрд░реЗрдВред
рдирд┐рд╖реНрдХрд░реНрд╖
рдмреЗрд╢рдХ, рднрд╛рд░реА рднрд╛рд░ рдХреЗ рддрд╣рдд рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреИрджрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
ActiveRecord
ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╢рд┐рдВрдЧ рджреНрд╡рд╛рд░рд╛ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ Yii рдХреЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рдм рдХреБрдЫ рд╣реИ)ред
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдРрд╕реЗ рдбреЗрд╡рд▓рдкрд░ рд╣реИрдВ рдЬреЛ рдЗрд╕реЗ рдкреВрд░реЗ рд╡рд┐рд╕реНрддрд╛рд░ рдореЗрдВ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдпрд╛ рдлрд┐рд░ рдЗрд╕рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЙрдкрдпреЛрдЧреА рдкрд╛рдПрдВрдЧреЗред
рднрд╡рд┐рд╖реНрдп рдХреА рдпреЛрдЬрдирд╛рдПрдВ рдХрдИ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрдзрд╛рд░ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрди рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдХрд┐рд╕реА рднреА рдЯрд┐рдкреНрдкрдгреА рдФрд░ рд╕реБрдЭрд╛рд╡ рдХреЗ рд▓рд┐рдП рдЖрднрд╛рд░реА рд░рд╣реВрдВрдЧрд╛ред
рдкреБрдирд╢реНрдЪ
рд▓реЗрдЦ рдмрдбрд╝рд╛ рдирд┐рдХрд▓рд╛ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдХрд╛ рдЗрд░рд╛рджрд╛ рдХреНрдпрд╛ рдерд╛, рдЗрд╕рдХрд╛ рдЖрдзрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рдерд╛) рдФрд░ рдХреБрдЫ рд╣рдж рддрдХ рдлрдЯрд╛ рд╣реБрдЖ рдерд╛ред рдпрджрд┐ рдЬрд╛рдирдХрд╛рд░реА рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реИ, рддреЛ рдореИрдВ рдХреБрдЫ рдФрд░ рдмрд┐рдВрджреБрдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╕рдВрдЧреНрд░рд╣ рдкреНрд░рд╛рдкреНрдд рд╣реБрдП рдереЗ (рдПрдХ рдореЗрдВ рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рд╕рдВрдпреЛрдЬрди), рдЖрджрд┐ред рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рднреА рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдореИрдВрдиреЗ AngularJS рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб API рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдмрд╛рддрдЪреАрдд рдХреА рдФрд░ рдХреИрд╕реЗ рд╕рд░реНрдЪ рдЗрдВрдЬрди рдлреНрд░реЗрдВрдбрд▓реА рд╡рди-рдкреЗрдЬ рдПрдкреНрд▓рд┐рдХреЗрд╢рди (PhantomJs рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреЗрдЬ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде) рдмрдирд╛рдпрд╛ред