sdkgen is a tool to help design, implement and maintain good APIs with minimal effort
MIT License
Bot releases are hidden (Show)
Correção no CI.
Published by lbguilherme about 1 year ago
extra
no Android (Kotlin). Ver #738.extras
no Android (Kotlin). Ver #738.apiTestWrapper
pode agora receber o contexto inicial.Published by lbguilherme about 2 years ago
decimal
para armazenar números monetários com precisão de casas decimais. Ver #724.json
em requisições REST com Swagger.Published by lbguilherme over 2 years ago
SdkgenHttpServer
como usual, e então registrar a propriedade handleRequest
como função para receber requisições HTTP. Ver detalhes na documentação. Ver #678.ctx.response.headers
e ctx.response.statusCode
para permitir modificar os headers e o status code da resposta de qualquer requisição, especialmente útil para requisições REST. Ver #676.SdkgenHttpServer
agora é opcional quando o ExtraContext
não é utilizado, simplificando o código quando injeção de dependência não é necessário.As contribuições de 2 pessoas tornaram essa nova versão possível: @dgadelha e @lbguilherme.
Published by lbguilherme over 2 years ago
Nenhuma alteração. Corrige a publicação do pacote fsharp-generator.
Published by lbguilherme over 2 years ago
!secret
utilizada em conjunto com a anotação @rest
(#659).As contribuições de 4 pessoas tornaram essa nova versão possível: @dgadelha, @GuiBernal, @joshuapassos, e @lbguilherme.
Published by lbguilherme over 2 years ago
Chegamos aqui com o sdkgen 2.0.0, após quase 1 ano de desenvolvimento, trazendo muitas melhorias e novidades, com poucas mudanças que podem impactar projetos. A expectativa é que a atualização possa ser aplicada na maioria dos projetos sem nenhuma mudança de código. É sempre recomendado que o servidor atualize primeiro, antes dos clientes. Vamos ao que temos de novidades:
Suporte ao Flutter 2 (sound null safety e Flutter Web)
O Flutter 2 foi lançado junto ao Dart 1.12 e trouxeram o suporte opcional a tipos nuláveis, uma evolução significativa. Uma boa parte do ecossistema já fez a migração e o sdkgen agora está construído da mesma maneira. Tanto o código gerado em Dart quanto o pacote sdkgen_runtime
utilizam tipos nuláveis. Em complemento, Flutter Web é suportado, assim como o Flutter para Android e iOS, oferecendo as mesmas funcionalidades.
Um detalhe que facilita o uso nesta versão é que anteriormente o SDK tinha que ser inicializado dentro de um widget passando acesso ao BuildContext
. Isso não é mais necessário e pode ser utilizado em qualquer lugar da aplicação, independente da UI.
Cliente nativo em iOS (experimental)
Um novo cliente nativo para iOS foi adicionado, junto ao gerador de código em Swift. Ele pode ser utilizado com o target swift_ios
ou rxswift_ios
no gerador. Nesta versão esse target já é funcional e suporta todos os recursos, no entanto ainda não foi testado o suficiente em produção. Em caso de problemas, por favor reporte. Com teste suficiente acontecendo, poderemos marcar como estável em uma das próximas versões.
Servidor em F# (experimental)
O suporte original para rodar sdkgen em .NET foi construído com base no .NET Core utilizando C#. Toda essa base foi reconstruída para dar espaço a uma nova versão em F#, muito mais moderna e possibilitando ser utilizada tanto em projetos F# quanto em C#. A implementação de métodos é fácil e direta, assim como acontece em Node.js, mantendo a mesma simplicidade. Atualmente os recursos base do sdkgen são suportados, mas alguns opcionais não são suportados por este target, como suporte a REST e a compatibilidade com versões legadas. Está sendo lançado como experimental pois ainda não foi testado o suficiente em produção. A expectativa é lançar como versão estável e completa no futuro próximo.
Novo Playground
O sdkgen possui um playgroud embutido desde a versão 1.0.0, possibilitando inspecionar uma API, conhecer as funções disponíveis e invocar elas com dados para testar. Agora estamos incluindo um novo playground, com suporte a:
O novo playground pode ser utilizado inclusive com API's que ainda não foram atualizadas para o sdkgen 2.0.0.
Acesse em: https://sdkgen.github.io/playground/ ou na rota /playground
da sua API. É necessário que introspection
esteja habilitado.
União de Tipos (experimental)
Em muitos casos é necessário que uma propriedade possa receber mais de um tipo de dado a depender da situação, por exemplo quando uma lista de eventos é retornada. Até então não havia uma boa forma de representar esses casos, mas agora o sdkgen suporta agregar dados adicionais no enum. Um exemplo de como isso pode ser utilizado:
type Event enum {
info(msg: string)
transaction(id: uuid, value: money, date: datetime, description: string)
refund(id: uuid)
ping
}
fn getEvents(): Event[]
Neste exemplo um Event
pode ser qualquer um dos 4 tipos possíveis, a depender de qual seja, ele virá acompanhado de alguns dados adicionais. Com isso é possível expressar cenários muito mais complexos de API's, sem precisar fazer rodeios.
Atualmente esse modelo funciona em Node.js e na Web com TypeScript, mas ainda não está habilitado nos demais targets, por conta disso está marcado como experimental. Esperamos passar a fornecer em todas as linguagens no futuro.
Tipos Recursivos
Outro caso difícil de expressar é quando tipos precisam ser arbitrariamente recursivos. Por exemplo, observe o caso de comentários em uma postagem, sendo que um comentário pode ter outros comentários dentro. Agora é possível declarar assim:
type Post {
body: string
authorId: uuid
comments: Comment[]
}
type Comment {
body: string
authorId: uuid
comments: Comment[]
}
Neste caso comentários podem conter comentários quantas vezes for necessário, usando um array vazio para representar um comentário que não tem outros comentários dentro. Tipos recursivos podem ser utilizados junto a união de tipos também.
Esperamos com isso aumentar a expressividade da descrição da API, representando cenários reais e evitando que o tipo json
precise ser utilizado.
Outras alterações
Todos os recursos marcados como depreciados nas versões anteriores foram removidos. Se eram utilizados no seu projeto, precisará atualizar.
Além disso foram aplicadas várias correções e melhorias internas, deixando o projeto mais estável como um todo.
Agradecimentos
As contribuições de 13 pessoas tornaram esse lançamento possível: @ahardmann, @danielpsantiago, @daniloapr, @davidcpires, @dgadelha, @elcioabrahao, @hofstede-matheus, @josecleiton, @joshuapassos, @lbguilherme, @manoellribeiro, @vhfmag, e @Yansb
Published by lbguilherme almost 3 years ago
bigint
no Playground e no Swagger.Published by lbguilherme about 3 years ago
Same as 1.6.0.
Published by lbguilherme about 3 years ago
browser-client
para intercepção de erros #428Published by lbguilherme over 3 years ago
Correções:
string
dentra da path não possam mais conter o caracter /
(#179).Published by lbguilherme over 3 years ago
Correção:
TypeDescription
utilizado para tipagem dos clientes em Node e Web com respeito ao enums.Esta release não inclui nenhuma alteração no comportamento durante execução.
Published by lbguilherme over 3 years ago
Correção:
encode
e decode
do @sdkgen/node-runtime
estava sendo incorretamente inferido quando o tipo possuia um enum. Essa tipagem foi corrigida.Esta release não inclui nenhuma alteração no comportamento durante execução.
Published by lbguilherme over 3 years ago
Nenhuma mudança.
Published by lbguilherme over 3 years ago
Middlewares
Agora é possível adicionar múltiplos middlewares na configuração de uma API, possibilitando tomar ações a depender dos argumentos ou do retorno.
api.use(async (ctx, next) => {
// Faça qualquer coisa com o `ctx` aqui.
// O nome da função é `ctx.request.name` e os argumentos `ctx.request.args`.
const reply = await next();
// Faça qualquer coisa com a resposta aqui.
return reply;
});
Os hooks anteriores de onRequestStart
e onRequestEnd
continuam funcionando, mas estão agora depreciados.
Você pode, por exemplo:
next
mais de uma vez);try
/catch
em volta do next
).Ver #161.
Outras mudanças
Published by lbguilherme almost 4 years ago
Correções
SdkgenErrorWithData
não será mais importado pelo código gerado sem necessidade, evitando problemas com linter (#141).WebpackManifestPlugin
no playground.error
(#152).money
no Flutter (#153).json
no Flutter (#159).Published by lbguilherme almost 4 years ago