Estou trabalhando em um projeto de hobby há alguns meses, um gateway de API licenciado pelo MIT projetado para ser independente de qualquer fornecedor específico. Acho que está indo muito bem, para ser sincero. À medida que minha base de código cresceu, vi oportunidades de melhorias no núcleo, que é o servidor HTTP. Transformar o servidor HTTP principal em sua própria microestrutura parecia uma solução lógica (e um ótimo exercício de aprendizado!).
Apresentamos o Kindle, o combustível que irá impulsionar sua aplicação. Kindling é baseado na biblioteca padrão Java 21, sem dependências. Ele foi projetado para ser programável, sem usar nenhuma mágica.
Aqui está um simples Olá Mundo com Kindling:
package io.kerosenelabs.kindling; import java.nio.file.Path; import java.util.HashMap; import io.kerosenelabs.kindling.constant.HttpMethod; import io.kerosenelabs.kindling.constant.HttpStatus; import io.kerosenelabs.kindling.exception.KindlingException; import io.kerosenelabs.kindling.handler.RequestHandler; public class Main { public static void main(String[] args) throws KindlingException { KindlingServer server = KindlingServer.getInstance(); // test request handler server.installRequestHandler(new RequestHandler() { /** * Tell the server what type of request this handler can work with */ @Override public boolean accepts(HttpMethod httpMethod, String resource) throws KindlingException { return httpMethod.equals(HttpMethod.GET) && resource.equals("/"); } /** * Do your business logic here */ @Override public HttpResponse handle(HttpRequest httpRequest) throws KindlingException { return new HttpResponse.Builder() .status(HttpStatus.OK) .headers(new HashMap() { { put("Content-Type", "text/html"); } }) .content("Hello from Kindling!
") .build(); } }); // serve our server server.serve(8443, Path.of("mykeystore.p12"), "password"); } }
Enviar uma solicitação CURL ao servidor gera esta resposta:
> GET / HTTP/1.1 > Host: localhost:8443 > User-Agent: curl/7.88.1 > Accept: */* > * TLSv1.3 (IN), TLS handshake, Newsession Ticket (4): Hello from Kindling!
...muito legal, certo?
Existem alguns bugs, como Content-Length faltando na resposta.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3