рднрд╛рдЧ 5. рдПрдХ рд░реАрд╕реНрдЯ рдПрдкреАрдЖрдИ рдмрдирд╛рдирд╛: рдкреЗрдЬрд┐рдиреЗрд╢рди, рдореИрдиреБрдЕрд▓ рд╕реЙрд░реНрдЯрд┐рдВрдЧ рдФрд░ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧрдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рдЖрдкрдиреЗ CRUD API рдХреА рдореБрдЦреНрдп рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ред
рдФрд░ рдЕрдм, рдЬрдм рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдХреЗ рдорд╛рд░реНрдЧ рдкрд░ HTTP GET рдЕрдиреБрд░реЛрдз рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рддрд╛рд▓рд┐рдХрд╛ рдХреА рд╕рднреА рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддреА рд╣реИрдВред рдпрд╣ HR.EMPLOYEES рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдХреЗрд╡рд▓ 107 рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдпрджрд┐ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╣рдЬрд╛рд░реЛрдВ рдпрд╛ рд▓рд╛рдЦреЛрдВ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╣реЛрдВ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ред рдореЛрдмрд╛рдЗрд▓ рдФрд░ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЬреИрд╕реЗ рдЧреНрд░рд╛рд╣рдХ рдЖрдорддреМрд░ рдкрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдХреБрдЫ рдЕрдВрд╢ рд╣реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рддрдм рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдиреЗ рдкрд░ рдЕрдзрд┐рдХ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ - рд╢рд╛рдпрдж рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдХреБрдЫ рд╡рд┐рд░рд╛рдо рдирд┐рдпрдВрддреНрд░рдг рдкрд░ "рдЕрдЧрд▓рд╛" рдмрдЯрди рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдПред
рдЗрд╕рдХреЗ рд▓рд┐рдП, REST API рдХреЛ рд▓реМрдЯреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП рдкреЗрдЬрд┐рдиреЗрд╢рди рдЯреВрд▓ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ рдмрд╛рд░ рдЬрдм рдкреГрд╖реНрдард╛рдВрдХрди рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЫрдБрдЯрд╛рдИ рдХреНрд╖рдорддрд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рдЬрд╛рддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдорддреМрд░ рдкрд░ рдкреГрд╖реНрдард╛рдВрдХрди рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдбреЗрдЯрд╛ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдбреЗрдЯрд╛ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдЯреВрд▓ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдбреЗрдЯрд╛ рдХреНрдпреЛрдВ рднреЗрдЬреЗрдВ, рдордзреНрдпрд╡рд░реНрддреА рдкрд░рдд рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдФрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ?
рдореИрдВ URL рдХреНрд╡реЗрд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ рддрд╛рдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХреЗрдВ рдХрд┐ рдкрд░рд┐рдгрд╛рдо рдХреИрд╕реЗ рдкреГрд╖реНрдард╛рдВрдХрд┐рдд, рд╕реЙрд░реНрдЯ рдХрд┐рдП рдЧрдП рдФрд░ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд┐рдП рдЬрд╛рдиреЗ рдЪрд╛рд╣рд┐рдПред рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЖрдкрдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ, рдкреНрд░рджрд░реНрд╢рди рд▓рдХреНрд╖реНрдпреЛрдВ рдЖрджрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рдореИрдВ рдЖрдкрдХреЛ рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдПрдкреАрдЖрдИ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдореИрдиреБрдЕрд▓ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛ред
рдкреГрд╖реНрда рдкрд░ рдЕрдВрдХ рд▓рдЧрд╛рдирд╛рдХреНрд╡реЗрд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛ рдореИрдВ рдкреЗрдЬрд┐рдиреЗрд╢рди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛: рдЫреЛрдбрд╝реЗрдВ рдФрд░ рд╕реАрдорд┐рдд рдХрд░реЗрдВред рд╕реНрдХрд┐рдк рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрдмрдХрд┐ рд╕реАрдорд╛ рд╕реАрдорд┐рдд рд▓рд╛рдЗрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд▓реМрдЯрд╛рдПрдЧреАред рдпрджрд┐ рдЧреНрд░рд╛рд╣рдХ рдореВрд▓реНрдп рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рддреЛ рдореИрдВ рд╕реАрдорд╛ рдХреЗ рд▓рд┐рдП 30 рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред
рдХреНрд╡реЗрд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реЗ рдорд╛рди рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдВрдЯреНрд░реЛрд▓рд░ рд▓реЙрдЬрд┐рдХ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░реЗрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдПрдкреАрдЖрдИ рдореЗрдВ рдкрд╛рд╕ рдХрд░реЗрдВред
рдирд┐рдпрдВрддреНрд░рдХреЛрдВ / рдХрд░реНрдордЪрд╛рд░реА.рдЬреЗрдПрд╕ рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ рдФрд░ рдХреЛрдб рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЙрд╕ рд░реЗрдЦрд╛ рдХреЗ рдмрд╛рдж рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ, рдЬреЛ req.params.id рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддреА рд╣реИред
рдЕрдм рдЖрдкрдХреЛ рдЗрди рдореВрд▓реНрдпреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛рдмреЗрд╕ рддрд░реНрдХ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдФрд░ рддрджрдиреБрд╕рд╛рд░ SQL рдХреНрд╡реЗрд░реА рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред SQL рдореЗрдВ, рдСрдлрд╕реЗрдЯ рдХреНрд▓реЙрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдХреНрд╡реЗрд░реА рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд▓реЙрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдорд╛рди рд╕реАрдзреЗ рдХреНрд╡реЗрд░реА рдореЗрдВ рдирд╣реАрдВ рдЬреЛрдбрд╝реЗ рдЬрд╛рдПрдВрдЧреЗ - рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЙрдиреНрд╣реЗрдВ рдкреНрд░рджрд░реНрд╢рди рдФрд░ рд╕реБрд░рдХреНрд╖рд╛ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдмрд╛рдЗрдВрдб рдЪрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ред
Db_apis / рдХрд░реНрдордЪрд╛рд░реА.js рдЦреЛрд▓реЗрдВ рдФрд░ рдЦреЛрдЬ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдмреНрд▓реЙрдХ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдирд┐рдореНрди рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ, рдЬрд┐рд╕рдореЗрдВ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рдХреНрд▓реЙрдЬрд╝ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред
рдпрд╣ рд╕рдм рдЖрдкрдХреЛ рдкреЗрдЬреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ! рдПрдкреАрдЖрдИ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреВрд╕рд░реЗ рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рдХреБрдЫ URL рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдВред рдпрд╣рд╛рдВ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рджрд┐рдП рдЧрдП рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
# use default limit (30) curl "http://localhost:3000/api/employees" # set limit to 5 curl "http://localhost:3000/api/employees?limit=5" # use default limit and set skip to 5 curl "http://localhost:3000/api/employees?skip=5" # set both skip and limit to 5 curl "http://localhost:3000/api/employees?skip=5&limit=5"
рдЫрдВрдЯрд╛рдИрдиреНрдпреВрдирддрдо рдкрд░, рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рд╕реЙрд░реНрдЯ рдФрд░ рдСрд░реНрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрд▓рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдЖрд░реЛрд╣реА рдпрд╛ рдЕрд╡рд░реЛрд╣реА)ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдПрдХ рдХреНрд╡реЗрд░реА рдкреИрд░рд╛рдореАрдЯрд░ (рдореИрдВ рд╕реЙрд░реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛) рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ 'last_name: asc' рдпрд╛ 'salary: desc' рдЬреИрд╕реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред SQL рдХреНрд╡реЗрд░реА рд╕реЗ рд▓реМрдЯрд╛рдП рдЧрдП рдкрд░рд┐рдгрд╛рдо рд╕реЗрдЯ рдХреЗ рдЖрджреЗрд╢ рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдЦрдВрдб рджреНрд╡рд╛рд░рд╛ рдЖрджреЗрд╢ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рд╣реИред рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ, рдЬрдм рдЧреНрд░рд╛рд╣рдХ рдЗрд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рддреЛ рд╕реНрдерд┐рд░рддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдСрд░реНрдбрд░ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред
рдирд┐рдпрдВрддреНрд░рдХреЛрдВ / рдХрд░реНрдордЪрд╛рд░реА рдХреЗ рдкрд╛рд╕ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВред req.query.limit рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рд╡рд╛рд▓реА рд▓рд╛рдЗрди рдХреЗ рдмрд╛рдж рдкреНрд░рд╛рдкреНрдд рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреА рдирд┐рдореНрди рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝реЗрдВред
рдлрд┐рд░
db_apis / рдХрд░реНрдордЪрд╛рд░реА.js рдЦреЛрд▓реЗрдВ рдФрд░
рдмреЗрд╕ рд▓рд╛рдЗрди рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдФрд░ рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рджреА рдЧрдИ рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝реЗрдВред
SortableColumns рд╕реНрддрдВрднреЛрдВ рдХрд╛ рдПрдХ рд╢реНрд╡реЗрддрд╕реВрдЪреА рд╣реИ рдЬрд┐рд╕реЗ рдЧреНрд░рд╛рд╣рдХ рдХреНрд░рдордмрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдлрд┐рд░, рдЦреЛрдЬ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░, рдирд┐рдореНрди рдЬреЛрдбрд╝реЗрдВ рдпрджрд┐ рдмреНрд▓реЙрдХ, рдЬреЛ рдЦрдВрдб рджреНрд╡рд╛рд░рд╛ рдЖрджреЗрд╢ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдпрд╣ рдЬрд╣рд╛рдВ рдХреНрд▓реЙрдЬ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдСрдлрд╕реЗрдЯ рдФрд░ рд▓рд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗред
рдпрджрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЙрд░реНрдЯ рд╡реИрд▓реНрдпреВ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдмреНрд▓реЙрдХ рдХрд╛ рдкрд╣рд▓рд╛ рднрд╛рдЧ рдЪреЗрдХ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдПрд╕рдХреНрдпреВрдПрд▓ рдХреНрд╡реЗрд░реА рдореЗрдВ рдХреНрд▓реЙрдЬрд╝ рджреНрд╡рд╛рд░рд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдСрд░реНрдбрд░ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЖрд░реЛрд╣реА рдХреНрд░рдо рдореЗрдВ last_name рджреНрд╡рд╛рд░рд╛ рд╕реЙрд░реНрдЯ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдПрдХ рд╕реЙрд░реНрдЯ рдорд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдкрд╣рд▓реЗ рдХреЙрд▓рдо рдФрд░ рдСрд░реНрдбрд░ рд╡реИрд▓реНрдпреВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдХреНрд╡реЗрд░реА рджреНрд╡рд╛рд░рд╛ рдСрд░реНрдбрд░ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рд╡реИрд▓реНрдпреВ рдХреА рдЬрд╛рдВрдЪ рдХреА рдЬрд╛рддреА рд╣реИред
рдЕрдм рдЖрдк рдЗрд╕реЗ рдорд╛рдиреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ URL рдХрдорд╛рдВрдб рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рджрд┐рдП рдЧрдП рд╣реИрдВ:
# use default sort (last_name asc) curl "http://localhost:3000/api/employees" # sort by id and use default direction (asc) curl "http://localhost:3000/api/employees?sort=id" # sort by hire_date desc curl "http://localhost:3000/api/employees?sort=hire_date:desc" # use sort with limit and skip together curl "http://localhost:3000/api/employees?limit=5&skip=5&sort=salary:desc" # should throw an error because first_name is not whitelisted curl "http://localhost:3000/api/employees?sort=first_name:desc" # should throw an error because 'other' is not a valid order curl "http://localhost:3000/api/employees?sort=last_name:other"
рдЕрдВрддрд┐рдо рджреЛ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдлреЗрдВрдХ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдореЗрдВ рд╡реЗ рдореВрд▓реНрдп рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рд╢реНрд╡реЗрддрд╕реВрдЪреА рдореЗрдВ рдирд╣реАрдВ рдмрдиреЗ рдереЗред рдпрд╣ рдорд╛рдирдХ рдПрдХреНрд╕рдкреНрд░реЗрд╕ рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рддреНрд░реБрдЯрд┐ HTML рд╡реЗрдм рдкреЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддреА рд╣реИред
рдЫрд╛рдирдиреЗрдбреЗрдЯрд╛ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдЬреЛ рд╕рднреА REST API рдХреЛ рдкреНрд░рджрд╛рди рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рдЫрдБрдЯрд╛рдИ рдХреЗ рд╕рд╛рде, рдЬреЛ рдЖрдк рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рд░рд▓ рдпрд╛ рдЬрдЯрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдкреВрд░реНрдг рдорд┐рд▓рд╛рди рдлрд╝рд┐рд▓реНрдЯрд░ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, last_name = Doe) рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдирд╛ рд╣реИред рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмреБрдирд┐рдпрд╛рджреА рдСрдкрд░реЗрдЯрд░реЛрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, <,>, instr, рдЖрджрд┐) рдФрд░ рдЬрдЯрд┐рд▓ рддрд╛рд░реНрдХрд┐рдХ рдСрдкрд░реЗрдЯрд░реЛрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдФрд░ / рдпрд╛) рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рд╕рд╛рде рдХрдИ рдлрд╝рд┐рд▓реНрдЯрд░ рд╕рдореВрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рдореИрдВ рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛ рдФрд░ рдХреЗрд╡рд▓ рджреЛ рдХреЙрд▓рдореЛрдВ рдХреЗ рд▓рд┐рдП рдлрд╝рд┐рд▓реНрдЯрд░ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝реВрдВрдЧрд╛: Department_id рдФрд░ manager_idред рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓рдо рдХреЗ рд▓рд┐рдП, рдореИрдВ рдХреНрд╡реЗрд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░реВрдВрдЧрд╛ред рдбреЗрдЯрд╛рдмреЗрд╕ рддрд░реНрдХ рдЬрд┐рд╕рдореЗрдВ GET рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЛ рдПрдХ рдХрд░реНрдордЪрд╛рд░реА рдХреЗ рд╕рд╛рде рдЕрдВрддрд┐рдо рдмрд┐рдВрджреБ рдкрд░ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдХреНрд▓реЙрдЬ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдЗрди рдирдП рдлрд┐рд▓реНрдЯрд░ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдирд┐рдпрдВрддреНрд░рдХреЛрдВ / рдХрд░реНрдордЪрд╛рд░реА рдЦреЛрд▓реЗрдВ редjs рдФрд░ рдкрдВрдХреНрддрд┐ рдХреЗ рдиреАрдЪреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВ рдЬреЛ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ req.query.sort рдорд╛рди рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддрд╛ рд╣реИред
рдлрд┐рд░ рдЖрдзрд╛рд░ рдХреНрд╡реЗрд░реА рдореЗрдВ 1 = 1 рд╡рд╛рдХреНрдп рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП
db_apis / рдХрд░реНрдордЪрд╛рд░реА.js рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
const baseQuery = `select employee_id "id", first_name "first_name", last_name "last_name", email "email", phone_number "phone_number", hire_date "hire_date", job_id "job_id", salary "salary", commission_pct "commission_pct", manager_id "manager_id", department_id "department_id" from employees where 1 = 1`;
рдмреЗрд╢рдХ, 1 = 1 рд╣рдореЗрд╢рд╛ рд╕рдЪ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рдХ рдХреЗрд╡рд▓ рдЗрд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░реЗрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рд╡рд┐рдзрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рдзреЗрдп рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдПрдЧреАред
рдЦреЛрдЬ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ, рдпрджрд┐ рдирд┐рдореНрди рд╕рдВрджрд░реНрднреЛрдВ рдХреЗ рд╕рд╛рде, рд╕рдВрджрд░реНрдн рдЦрдВрдб рдХреЛ рдкрд╛рд░ рдХрд░рддреЗ рд╕рдордп, рдЬрд╣рд╛рдВ рдЦрдВрдб рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рддреЛ рдЙрд╕ рдмреНрд▓реЙрдХ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ рдпрджрд┐ рдмреНрд▓реЙрдХ рдХреЗрд╡рд▓ рдмрд╛рдЗрдВрдб рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рджрд┐рдП рдЧрдП рдорд╛рди рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЙрд╕реА рдЦрдВрдб рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд┐рдзреЗрдп рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдЬрд╣рд╛рдВред рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд╕рд╣реЗрдЬреЗрдВ рдФрд░ API рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░реЗрдВред рдлрд┐рд░ рдЗрд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрди URL рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
# filter where department_id = 90 (returns 3 employees) curl "http://localhost:3000/api/employees?department_id=90" # filter where manager_id = 100 (returns 14 employees) curl "http://localhost:3000/api/employees?manager_id=100" # filter where department_id = 90 and manager_id = 100 (returns 2 employees) curl "http://localhost:3000/api/employees?department_id=90&manager_id=100"
рдпрд╣ рдмрд╛рдд рд╣реИ - рдПрдкреАрдЖрдИ рдЕрдм рдкреГрд╖реНрдард╛рдВрдХрди, рдЫрдБрдЯрд╛рдИ рдФрд░ рдЫрд╛рдирдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ! рдПрдХ рдореИрдиреБрдЕрд▓ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдмрд╣реБрдд рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЦреЛрдЬ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЕрдм 58 рд▓рд╛рдЗрдиреЗрдВ рд╣реИрдВ рдФрд░ рдХреЗрд╡рд▓ рд╕реАрдорд┐рдд рдЫрдВрдЯрд╛рдИ рдФрд░ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдЖрдк рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП
Knex.js рдХреНрд╡реЗрд░реА
рдмрд┐рд▓реНрдбрд░ рдЬреИрд╕реЗ рдХрд┐рд╕реА рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред