Olá a todos – hoje tenho a honra de mostrar aos senhores como usar o novíssimo registro de serviços
novo registro de serviços para microsserviços, stdlib.
O senhor também pode verificar o stdlib no GitHub,
que é o projeto de código aberto que usaremos para gerar o scaffolding de serviço
e cuidar do gerenciamento de pacotes.
Fácil! É uma nova abordagem sobre registros de software e gerenciamento de pacotes
com os quais o senhor provavelmente já está familiarizado, como o NPM. Em vez de se concentrar em instalações locais
instalações locais de software, o stdlib permite que o senhor escreva microsserviços simples
com vários pontos de extremidade HTTP funcionais que o senhor acessa pelo fio como
chamadas de procedimento remoto. O senhor pode então registrar esses serviços no registro central da stdlib
nesse momento, eles poderão ser descobertos por outras pessoas (se o senhor
optar por publicá-los) e também serão backends da Web totalmente funcionais. É
na verdade, totalmente compatível com o NPM, se o senhor decidir que deseja
publicar seu serviço para instalação local também.
A stdlib registro é de uso gratuito, para qualquer pessoa. Em vez de outros
baixarem seu código, o próprio serviço permanece código fechado, com apenas
pontos de extremidade HTTP expostos. O conteúdo real pode ser baixado apenas pelo senhor e sua
equipe. Seus serviços também podem ser executados gratuitamente, no momento da redação deste artigo, por até
até 500.000 segundos de tempo de computação.
O senhor pode pensar em usar o stdlib um pouco como uma mistura entre o NPM e o Heroku
para microsserviços, com foco em partes de aplicativos menores e funcionais. O
potencial é vasto, o senhor pode criar um serviço com qualquer complexidade que desejar
e nunca se preocupar com escala ou gerenciamento de infraestrutura.
Primeiros passos
Para começar a usar o stdlib, primeiro o senhor terá que baixar as ferramentas de linha de comando,
disponíveis no NPM. Primeiro, o senhor deve ter o Node 6.X instalado, disponível aqui, em nodejs.org.
Depois de instalar o node (ou se ele já estiver instalado), basta executar:
$ npm install -g stdlib.com@1.0.0-dev5
Isso instala o Developer Preview para ferramentas CLI. Pode haver versões mais recentes
disponíveis, portanto, sempre confira stdlib no GitHub
ao criar novos microsserviços 🙂
Para criar um espaço de trabalho stdlib que contenha todas as suas funções em desenvolvimento
em desenvolvimento, primeiro crie um diretório no qual o senhor estará desenvolvendo e, em seguida, inicialize
stdlib.
$ mkdir stdlib $ cd stdlib $ stdlib init
Ao inicializar um espaço de trabalho, será solicitado que o senhor digite o endereço de e-mail que
usado para se inscrever no registro. O senhor pode pular essa etapa com o --no-login
,
mas isso não é recomendado – o senhor não conseguirá enviar o código sem ele! Se o senhor
ainda não tiver uma conta, o senhor poderá criar uma.
Criando um serviço
Criar um serviço é muito simples. Não há necessidade de criar um novo diretório. O senhor
deve fazer isso no diretório de nível superior do espaço de trabalho.
$ stdlib create
O senhor será solicitado a adicionar um nome de serviço e um nome de função padrão. A função
função padrão será o mapeamento da Web “raiz” do seu serviço, se não
informações adicionais sobre a função forem fornecidas, embora os serviços possam suportar mais
do que uma função.
Anatomia de um serviço
Os serviços têm quatro componentes principais;
package.json
package.json
é seu pacote de serviço principal. Esse é um arquivo compatível com o NPM que
contém um "stdlib"
com as seguintes propriedades:
-
"name"
: O nome para o qual o serviço será publicado. Geralmente no formato
<username>/<service>
. Para enviar seu serviço para o registro da stdlib,
o senhor precisará ter acesso ao registro<username>
. -
"defaultFunction"
: O ponto de entrada padrão para o seu serviço se nenhuma função
for fornecida. Os serviços são acessados por<username>/<service>/<function>
, so
especificando esse campo como"main"
faria com que o<username>/<service>
map to
<username>/<service>/main
. -
"timeout"
: O tempo limite, em milissegundos, para a execução do serviço. Esse é o
limite superior do tempo de computação aplicado a todas as funções do serviço. -
"publish"
: Publicar ou não publicar publicamente para o registro central quando
seu serviço é enviado para a nuvem. Uma lista de serviços públicos pode ser encontrada em
a página de pesquisa da stdlib.
Um arquivo JSON contendo variáveis de ambiente a serem enviadas para o process.env
variável. Ao trabalhar localmente, os serviços carregarão qualquer coisa em "dev"
e
quando o senhor enviar uma versão para a stdlib, os serviços usarão os valores contidos em
"release"
. Quaisquer outros nomes de ambiente existem para fins de preparação na nuvem.
function.json
O senhor notará uma pasta, f/
, no diretório principal do serviço. Se o senhor especificou
o nome da função padrão como main
, o senhor deverá ver:
f/main/function.json f/main/index.js
No seu f/
o senhor tem um diretório. Esse é seu primeiro endpoint funcional!
function.json
é um arquivo JSON com alguns campos;
-
"name"
: O nome da função. Deve corresponder af/<function_path>
exatamente, ou o
emitirá um erro. -
"description"
: Uma breve descrição da função. -
"args"
: Uma matriz que contém informações sobre os argumentos que a função
espera. Mais sobre isso daqui a pouco. -
"kwargs"
: Um objeto (pares de valores chave) que contém informações sobre as
argumentos de palavras-chave que a função espera. Mais sobre isso daqui a pouco.
index.js
Isso é acompanhado por um function.json
em um diretório de funções. É uma
função simples do formato;
module.exports = (params, callback) => {
callback(null, 'hello world');
};
Onde params
é um objeto que contém os argumentos (params.args
) e
argumentos de palavras-chave (params.kwargs
) passados para a função.
callback
é um retorno de chamada de função que termina a execução da função, esperando um argumento de erro
argumento de erro (ou null
se não houver erro) e um resultado serializável em JSON (ou
a Buffer
para processamento de arquivos).
Usando seu serviço localmente
O primeiro serviço que o senhor criou a partir do stdlib create
deve ter uma função
que retorna "hello world"
. Para executar essa função (e testá-la), primeiro
vá para seu diretório de serviços:
$ cd <username>/<service>
Se o seu nome de usuário for best_developer
e o senhor criou um serviço chamado test
, o senhor
faria:
$ cd best_developer/test
Agora basta digitar:
$ f . > "hello world"
Incrível! 🙂 O stdlib vem com uma ferramenta de teste de linha de comando chamada f
, que
se baseia no f do NPM / GitHub para fazer
testes de microsserviços. Se o senhor começar seu caminho de função com um .
ele procurará
por uma função local; caso contrário, ele executará uma função ativa, na nuvem.
Observe que essa execução é equivalente a;
$ f ./main > "hello world"
Se o senhor "defaultFunction"
estiver definido como "main"
.
Há duas maneiras de registrar seu serviço. Em um ambiente de preparação,
ou como uma versão. Os ambientes de teste são mutável e pode ser sobrescrito à
vontade. As liberações são imutável e não podem ser sobrescritos, mas podem ser desfeitos
abaixo.
Registre-se como um serviço de preparação
Para enviar seu serviço para a nuvem em um ambiente de preparação, use:
$ stdlib up <environment>
Onde <environment>
é o nome do ambiente de preparação pretendido. Esse
mapeia diretamente para o process.env
armazenadas em env.json
portanto
certifique-se de usar o nome correto. Seu serviço local é executado em dev
ambiente,
portanto, esse é um bom alvo para testar na nuvem também:
$ stdlib up dev
Isso registrará e compilará seu serviço. Depois de concluído, o senhor poderá
executar seu serviço na nuvem usando;
$ f <username>/<service>@dev > "hello world"
Ou, usando o exemplo acima:
$ f best_developer/test@dev > "hello world"
O senhor também pode acessar seu serviço por HTTPS via curl ou no navegador;
https://f.stdlib.com/best_developer/test@dev
Voilà! 🙂
Registre-se como uma liberação
Os lançamentos são imutávelportanto, certifique-se de que o senhor está confiante no que está
porque, embora possam ser destruídas, as versões nunca podem ser sobrescritas
(ou “voltar” pelos padrões do semver). Para liberar um serviço, use;
$ stdlib release
Isso registrará seu serviço com a versão especificada em package.json
.
Se o senhor quiser que seu serviço seja pesquisado publicamente no registro, set
"publish": true
no "stdlib"
campo da package.json
.
O senhor pode ver uma lista de comunicados publicados aqui.
Para remover um serviço, basta digitar;
$ stdlib down <environment>
ou
$ stdlib down -r <version>
Observe que stdlib rollback
também pode ser usado como um atalho para remover o
versão atualmente especificada, se publicada por acidente.
Reiniciar ou reconstruir um serviço
Se o seu serviço, uma vez publicado na nuvem, por qualquer motivo parar de funcionar
o senhor pode tentar reiniciá-lo com;
$ stdlib restart <environment> [-r <version>]
Isso não deve ser necessário, mas a opção existe caso o senhor encontre algum
erros.
Além disso, o senhor também pode reconstruir um serviço. Isso reinstala as dependências do pacote
e usa a versão mais atualizada do software de microsserviço stdlib
software. Isso pode ser incentivado à medida que lançamos atualizações, por motivos de desempenho e
segurança.
$ stdlib rebuild <environment> [-r <version>]
Criando mais funções de serviço
Para criar pontos de extremidade adicionais para o seu serviço (mais funções!), basta
digite:
$ stdlib f:create <function>
Isso criará uma nova função “hello world” com o nome recém-especificado;
Modifique-a de acordo com o conteúdo de seu coração! Isso é não uma função padrão, portanto, ela
precisará ser acessada usando (desde que o nome new-func
);
$ f ./new-func
Argumentos e argumentos de palavras-chave
Para passar diferente params.args
e params.kwargs
para sua função,
use:
$ f . arg0 arg1 --kwarg0 value --kwarg2 "another value"
Ao acessar serviços via HTTP GET, todos os parâmetros de consulta são convertidos em
argumentos de palavras-chave.
https://f.stdlib.com/user_name/service@version?name=Ed%20Harris
Seria definido params.kwargs.name
igual à string "Ed Harris"
.
O senhor também pode passar qualquer número de argumentos ou argumentos de palavras-chave de outro
aplicativo usando a função f
conforme descrito abaixo.
Acesso ao seu serviço a partir de outros aplicativos
Qualquer serviço que o senhor colocar no registro stdlib pode ser acessado por outros
aplicativos usando os pontos de extremidade HTTP para o serviço, em:
https://f.stdlib.com/user_name/service@version/function
Node.js
Para facilitar isso, usando o Node.js, o senhor pode instalar o f
biblioteca, disponível
no GitHub. No projeto do qual o senhor deseja acessar seu
use:
$ npm install f --save
e depois em seu código…
const f = require('f');
f('user_name/service@version/function')(arg1, arg2, {kwarg1: 'value'}, (err, result) => {
if (err) {
// service errored
}
// do something with `result` here!
});
O f
pode ser usada de forma idêntica no navegador. Ela faz parte do
mesmo repositório do GitHub e pode ser instalado via
Bower usando poly/f
.
Isso é tudo o que o senhor precisa para começar a usar a stdlib. Espero, sem dúvida, que o senhor goste
usá-la tanto quanto eu gostei de criá-la. Fique atento a mais artigos
mostrando alguns exemplos de funções e coisas interessantes que o senhor pode fazer com microsserviços.
Boa sorte, divirta-se e boa construção!
PERGUNTAS FREQUENTES
O senhor chegou até aqui, não é? Sou muito grato a David Walsh por sediar este evento e
por estar tão empolgado quanto eu com o futuro do projeto 🙂
Por que o nome stdlib?
É uma brincadeira com o Biblioteca padrão do C,
ou #include <stdlib.h>
. Gostaríamos de saber como o senhor chamaria um registro para
chamadas de procedimento remoto na Web e stdlib.com
fez o maior sentido!
É uma especificação do Python, mas funciona, faz sentido e mapeia para uma tonelada
de outras linguagens para as quais criaremos SDKs. Dessa forma, os desenvolvedores podem escrever
que esperam apenas argumentos sem nome, ou podem especificar os nomes dos
argumentos que gostariam que fossem passados.
Por que usar stdlib? Por que não, digamos, o AWS Lambda?
A hospedagem do serviço stdlib é, na verdade, construída com base no AWS Lambda. Se for isso que o senhor
preferir, por favor, não queremos impedi-lo. O stdlib não é um substituto
para o Lambda, ele é um registro! É uma oferta totalmente diferente que aumenta
o modelo “sem servidor” para aliviar completamente sua mente e fornecer fluxos de trabalho que
sua equipe possa se organizar para que o senhor não tenha que criá-los sozinho. stdlib
fornece controle de versão mais fácil, gerenciamento de pacotes, ferramentas de equipe e outros
recursos interessantes.
Quem criou a stdlib?
O stdlib foi criado em um porão por um cachorro chamado Ruby. Alguns dizem que o senhor ainda pode
ouvi-la ofegar quando o senhor registra um serviço. Brincadeiras à parte, meu nome é Keith
Horwood e sou conhecido por fazer Node e coisas de código aberto. (Mas Ruby é meu cachorro e
ela é linda). Provavelmente, sou mais conhecido por ser o autor do popular framework de código aberto
API framework, Nodal. O senhor pode me seguir
no Twitter, @keithwhor mas seria melhor
se o senhor seguisse toda a nossa empresa – @Polybit!
Envie um pull request ou abra um problema no site repositório do GitHub do stdlib.
Se quiser nos ajudar a criar o futuro da tecnologia “sem servidor”, o senhor pode
também candidatar-se para trabalhar conosco na Polybit. Somos novos,
estamos crescendo e, se o senhor for entusiasta e tiver boas ideias, queremos que se junte a nós
e nos diga como tornar tudo melhor :).

Sobre Keith Horwood
Keith é um desenvolvedor autodidata de Toronto, Canadá, apaixonado por aprender e construir. Ex-líder de engenharia da Storefront, sua aventura mais recente foi a criação do Polybit, um serviço que permite que os desenvolvedores criem e implementem com mais eficiência seus back-ends de aplicativos para que possam se concentrar em seus produtos e clientes.