sails.js
API Blueprint
Поиск…
замечания
Как работает Blueprint API?
Когда паруса вначале начинают использовать sails lift
, паруса видят, есть ли у вас какой-либо контроллер. В нашем примере у нас есть один контроллер, Пользовательский контроллер. Затем Sails предоставляет доступ к проектам чертежа для этого пользовательского контроллера, как если бы мы сами строили их в контроллере. Паруса также автоматически создают маршруты маршрутизации во время подъема сервера. Поэтому, даже если в /config/routes.js
не определены /config/routes.js
и никакие действия не определены в /api/controllers/UserController.js
явно, после подъема сервера все эти маршруты и действия доступны для использования.
Маршруты Blueprint
Когда вы запускаете sails lift
с включенными чертежами, структура проверяет ваши контроллеры, модели и конфигурацию, чтобы автоматически связывать определенные маршруты. Эти неявные маршруты маршрута позволяют вашему приложению отвечать на определенные запросы без необходимости связывать эти маршруты вручную в файле config/routes.js
. По умолчанию маршруты маршрутизации указывают на соответствующие им действия , любые из которых могут быть переопределены с помощью специального кода.
В Sails есть три типа маршрутов:
- RESTful , где путь всегда
/:model/:id?
, КогдаUser
модель и контроллер определены, схема привязывает маршруты RESTful неявно следующим образом -
Эти маршруты используют HTTP-глагол для определения действия, которое необходимо предпринять, даже если маршрут такой же. Таким образом, запрос'GET /user/:id?': { controller: 'User', action: 'find' }, 'POST /user': { controller: 'User', action: 'create' }, 'PUT /user/:id?': { controller: 'User', action: 'update' }, 'DELETE /user/:id?': { controller: 'User', action: 'destroy' }
POST
для/user
создаст нового пользователя, запросPUT
/user/123
будет обновлять пользователя с помощью первичного ключа 123, а запросDELETE
to/user/123
удалит пользователя, чей первичный ключ - 123. В среда производства, маршруты RESTful, как правило, должны быть защищены политиками, чтобы избежать несанкционированного доступа.
Маршруты ярлыка , где действие, которое нужно предпринять, закодировано в пути. Для нашей модели пользователя и контроллера Sails неявно связывает следующие четыре маршрута ярлыка.
'GET /user/find/:id?': { controller: 'User', action: 'find' }, 'GET /user/create/:id?': { controller: 'User', action: 'create' }, 'GET /user/update/:id?': { controller: 'User', action: 'update' }, 'GET /user/destroy/:id?': { controller: 'User', action: 'destroy' }
Например,
/user/create?name=joe
shortcut создает нового пользователя, а/user/update/1?name=mike
обновляет поле имени пользователя # 1. Обратите внимание, что эти маршруты отвечают только на запросыGET
. Маршруты ярлыков очень удобны для разработки, но обычно они должны быть отключены в рабочей среде. Он не предназначен для использования в производстве.Маршруты действий , которые автоматически создают маршруты для пользовательских действий контроллера. Например, пусть
query
является настраиваемым действием, определенным в User controller. Тогда следующие маршруты будут неявно доступны для парусов -'GET /user/query/:id?': { controller: 'User', action: 'query' }, 'POST /user/query/:id?': { controller: 'User', action: 'query' }, 'PUT /user/query/:id?': { controller: 'User', action: 'query' }, 'DELETE /user/query/:id?': { controller: 'User', action: 'query' }
Если запрос сделан в
/user/query/:id?
маршрут, затем независимый от HTTP-глагола, действие будет таким же. В отличие от маршрутов RESTful и ярлыков, маршруты действий не требуют, чтобы у контроллера был соответствующий файл модели. Это означает, что если вы определяете контроллер в файле/api/controllers/FooController.js
но не моделируете в файле/api/models/Foo.js
, не будет RESTful или ярлыка маршрута с/foo
но все равно будут маршруты действий доступный для использования.
Порядок согласования маршрутов
Когда приходит запрос, паруса сначала будут сопоставлять маршрут с явно определенными маршрутами. Если он совпадает, то дальнейшее согласование не выполняется и выполняется соответствующее действие. Но если это не соответствует, то маршрут сначала сопоставляется с маршрутами действий проекта, если он не совпадает с маршрутами отдыха, и если он не соответствует ни маршрутам быстрого доступа. Поэтому, если ваш файл /config/routes.js
имеет некоторую запись, например следующую:
'/user/query/:id?': {
controller: 'User',
action: 'find'
}
Тогда вы не можете ожидать, что маршруты действий query
будут работать. Поскольку тот же маршрут , как query
маршрут действий будет соответствовать против явного определения маршрутов и find
действие контроллера пользователя будет выполняться.
Действия Blueprint
Действия Blueprint (не путать с маршрутами действий проекта) - это общие действия, предназначенные для работы с любым из ваших контроллеров, имеющих модель с тем же именем (например, ParrotController
понадобится модель Parrot
). Подумайте о них как о поведении по умолчанию для вашего приложения. Например, если у вас есть модель User.js
и пустой контроллер UserController.js
, вы можете find
, create
, update
, destroy
, populate
, add
и remove
действия, не требуя их написать.
По умолчанию маршруты маршрута RESTful и маршруты ярлыков привязаны к их соответствующим проектам. Однако любое действие чертежа может быть переопределено для конкретного контроллера путем создания пользовательского действия в этом файле контроллера (например, ParrotController.find
). Кроме того, вы можете переопределить действие чертежа повсюду в своем приложении , создав собственное пользовательское действие.
Sails поставляется со следующими проектами:
- находить
- findOne
- Создайте
- Обновить
- уничтожить
- населять
- добавлять
- Удалить
Отключение маршрутов Blueprint
Глобальная основа : Конфигурация API Blueprint определена в файле
/config/blueprint.js
. Вы можете включать или отключать все три типа маршрутов для всех контроллеров. Например, если вы хотите отключить маршруты ярлыков для всех ваших контроллеров, но хотите, чтобы оба маршрута действия и отдыха были включены, ваш/config/blueprint.js
должен быть таким:module.exports.blueprints = { action: true, rest: true, shortcut: false }
На основе каждого контроллера : вы также можете переопределить любые настройки из
/config/blueprints.js
на основе каждого контроллера, указав ключ «_config» в своем определении контроллера и назначив ему объект конфигурации с переопределениями для настроек в этом файле. В качестве примера, если вы хотите, чтобы маршруты быстрого доступа были включены только для вашего пользовательского контроллера, но не для каких-либо контроллеров, то с приведенной выше конфигурацией плана вы должны иметь следующую пару значений ключа в пользовательском контроллере.module.exports = { _config: { actions: true, shortcuts: true, rest: true } }