В течение нескольких месяцев я работал над хобби-проектом — шлюзом API с лицензией MIT, разработанным так, чтобы быть независимым от какого-либо конкретного поставщика. Я думаю, что все идет очень хорошо, если честно. По мере того как моя кодовая база росла, я видел возможности для улучшения ядра — HTTP-сервера. Выделение основного HTTP-сервера в отдельную микроструктуру казалось логичным решением (и отличным учебным упражнением!).
Представляем Kindling, топливо, которое зажжет ваше приложение. Kindling основан на стандартной библиотеке Java 21 без каких-либо зависимостей. Его можно программировать без использования какой-либо магии.
Вот простой пример Hello World с 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"); } }
Отправка запроса CURL на сервер дает следующий ответ:
> 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!
... довольно круто, правда?
Есть несколько ошибок, например, в ответе отсутствует Content-Length.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3