Como qualquer bom framework web, o Sails visa reduzir a quantidade de código que você escreve e o tempo necessário para colocar um aplicativo funcional em funcionamento. Blueprints são a maneira da Sails de gerar rapidamente rotas e ações de API com base no design do seu aplicativo.
Juntas, as rotas do blueprint e as ações do blueprint constituem a API do blueprint, a lógica interna que alimenta a API JSON RESTful que você obtém toda vez que cria um modelo e um controlador.
Por exemplo, se você criar um arquivo de modelo User.js em seu projeto, com os blueprints habilitados, você poderá navegar imediatamente para /user/create?name=joe e criar um usuário e depois para /user para ver a lista de usuários do seu aplicativo. Tudo sem escrever uma única linha de código!
Os Blueprints são uma ferramenta poderosa para prototipagem, mas em muitos casos também podem ser usados na produção, uma vez que podem ser substituídos, protegidos, estendidos ou desativados completamente.
Quando você executa o comando sails lift
com blueprints habilitado, o framework
inspeciona seus modelos e arquivos de configuração para vincular determinadas rotas automaticamente.
Essas rotas de blueprint implícitas (às vezes chamadas de "rotas de sombra", ou mesmo apenas "sombras") permitem
que seu aplicativo responda a determinadas solicitações sem que você precise vincular essas rotas manualmente em
seu arquivo
config/routes.js
.
Quando habilitadas, as rotas de blueprint apontam para suas ações de blueprint correspondentes (consulte "Rotas
de ação" abaixo), lembrando que qualquer uma delas pode ser substituída por código personalizado.
Existem quatro tipos de rotas de blueprint no Sails:
Os blueprints REST são as rotas geradas automaticamente que o Sails usa para expor uma API REST
convencional para um modelo (api/models/*.js), incluindo ações de localizar, criar, atualizar e
destruir.
O caminho para rotas RESTful é sempre /:modelIdentity
ou
/:modelIdentity/:id
.
Essas rotas usam o "verbo" HTTP para determinar a ação a ser executada.
Por exemplo, considerando um modelo api/models/Barco.js
:
await
Barco.find({})
await Barco.findOne({id: id})
await Barco.create({nome: nome-do-barco, numero:
numero-do-barco})
await Barco.updateOne({id: id},{nome: nome-do-barco,
numero: numero-do-barco})
await Barco.destroy({id: id})
req.method()
para capturar o método utilizado
na requisição.
As rotas de atalho são um hack simples (apenas no modo de desenvolvimento) que fornece acesso aos
seus modelos a partir da barra de URL do seu navegador (ou seja, tudo com HTTP GET).
As rotas de atalho são as seguintes:
Rota de Atalho | Ação Sombra | Exemplo |
---|---|---|
GET /:modelIdentity/find | find | http://localhost:1337/user/find?name=bob |
GET /:modelIdentity/find/:id | findOne | http://localhost:1337/user/find/123 |
GET /:modelIdentity/create | create | http://localhost:1337/user/create?name=bob&age=18 |
GET /:modelIdentity/update/:id | update | http://localhost:1337/user/update/123?name=joe |
GET /:modelIdentity/destroy/:id | destroy | http://localhost:1337/user/destroy/123 |
GET /:modelIdentity/:id/:association/add/:fk | add | http://localhost:1337/user/123/pets/add/3 |
GET /:modelIdentity/:id/:association/remove/:fk | remove | http://localhost:1337/user/123/pets/remove/3 |
GET /:modelIdentity/:id/:association/replace?association=[1,2...] | replace | http://localhost:1337/user/123/pets/replace?pets=[3,4] |
Quando as rotas de sombra (sails.config.blueprints.actions) são habilitadas,
uma rota de sombra raiz adicional é automaticamente exposta, a
ação index.
Por exemplo, se você tiver um arquivo FooController.js com uma função index(), uma rota de
sombra
/foo
será automaticamente vinculada a essa ação. Da mesma forma, se você tiver uma
ação autônoma
em api/controllers/foo/index.js
, uma rota /foo
será exposta
automaticamente em seu nome.
Quando as rotas de sombra estiverem ativadas, o Sails criará rotas genéricas (não faz diferença se é GET, POST, PUT ou DELETE) para uma determinada ação de um controlador (bastando que ele exista no diretório /api/controllers), automaticamente. Isso é útil (especialmente no início do processo de desenvolvimento) para acelerar o desenvolvimento de backend, eliminando a necessidade de vincular rotas manualmente.
Por exemplo, se você tiver um arquivo controllers/FooController.js
com um método de
ação
bar()
,
uma rota /foo/bar
será criada automaticamente para você, desde que sails.config.blueprints.actions
esteja habilitado.
Ao contrário das sombras RESTful e dos Atalhos, as Rotas de Ação não exigem que um
controlador tenha um arquivo de modelo (api/models/*.js
) correspondente e,de
mesmo modo, não são capazes de acessar o modelo de dados, sem que isso esteja
explicitamente
definido do corpo da ação.
Se existir uma ação index()
, rotas adicionais serão criadas para ela. Finalmente,
todas
as Shadow Action oferecem suporte a um parâmetro de caminho opcional, :id, para
conveniência.
config/routes.js
uma rota que impeça isso do seguinte modo
'DELETE /user': {response: 'notFound'}
ou testar, dentro do corpo da action, qual o
VERBO foi utilizado na requisição req.method
antes de continuar.
routes.js
terá precedência sobre a rota implícita, seu dado estará seguro.
config/*.js
e os manterá em memória como atributos do objeto sails.config
, ou seja, o valor de sails.config.blueprints.actions
corresponderá ao contido no arquivo config/blueprints.js
/** * Blueprint API Configuration * (sails.config.blueprints) * * For background on the blueprint API in Sails, check out: * https://sailsjs.com/docs/reference/blueprint-api * * For details and more available options, see: * https://sailsjs.com/config/blueprints */ module.exports.blueprints = { /*************************************************************************** * * * Automatically expose implicit routes for every action in your app? * * * ***************************************************************************/ // actions: false, /*************************************************************************** * * * Automatically expose RESTful routes for your models? * * * ***************************************************************************/ rest: false, /*************************************************************************** * * * Automatically expose CRUD "shortcut" routes to GET requests? * * (These are enabled by default in development only.) * * * ***************************************************************************/ shortcuts: false, };
config/env/production.js
,
config/env/staging.js
,
config/blueprints.js
, config/security.js
e, caso exista, no
config/local.js