Saat Anda membutuhkan bagian bergerak paling sedikit
Program Minum paling sederhana (lihat lebih banyak sampel kode di bawah):
public class Main {
public static void main ( String [] args ) {
var minum = FullSystem . initialize ();
var wf = minum . getWebFramework ();
wf . registerPath ( GET , "" ,
r -> Response . htmlOk ( "<p>Hi there world!</p>" ));
minum . block ();
}
}Kerangka kerja web ini, "Minum", memberikan fondasi minimalis bertenaga penuh untuk aplikasi web. Untuk TDD, oleh TDD.
make test_coverage )make mutation_test )Minum adalah lima ribu baris kode - pesaing "minimalis" berkisar dari 400.000 hingga 700.000 baris ketika memperhitungkan dependensi mereka. Saya belum menemukan proyek serupa.
Menerapkan pendekatan minimalis memungkinkan debugging, pemeliharaan, dan biaya keseluruhan yang lebih mudah. Sebagian besar kerangka kerja perdagangan start-up lebih cepat dengan biaya keseluruhan yang lebih tinggi. Jika Anda membutuhkan kualitas berkelanjutan, perangkat lunak harus diuji dengan baik dan didokumentasikan sejak awal. Sebagai contoh, kemampuan proyek ini untuk mencapai cakupan uji yang tinggi sangat dimungkinkan oleh paradigma minimalisme.
Ada awal yang cepat, atau jika Anda memiliki sedikit lebih banyak waktu, pertimbangkan untuk mencoba tutorial
< dependency >
< groupId >com.renomad</ groupId >
< artifactId >minum</ artifactId >
< version >8.0.5</ version >
</ dependency >Ukuran yang dikompilasi: 200 kilobytes.
Lini Kode Produksi (termasuk dependensi yang diperlukan)
| Minum | Javalin | Boot musim semi |
|---|---|---|
| 5.335 | 141.048 | 1.085.405 |
Lihat detailnya
Lihat Perbandingan Kinerja Kerangka
Lihat tautan berikut untuk proyek sampel yang menggunakan kerangka kerja ini.
Yang paling kecil
Proyek ini sangat berharga untuk melihat aplikasi minimal yang dapat dibuat. Ini mungkin titik awal yang baik untuk penggunaan minum pada proyek baru.
Contoh
Ini adalah contoh yang baik untuk melihat proyek dasar dengan berbagai fungsionalitas. Ini menunjukkan banyak kasus penggunaan khas dari kerangka kerja minum.
Proyek Memoria
Ini adalah proyek pohon keluarga. Ini menunjukkan jenis pendekatan kerangka kerja ini dimaksudkan untuk dibina.
Instantiating database baru:
var db = new Db <>( foosDirectory , context , new Foo ());Menambahkan objek baru ke database:
var foo = new Foo ( 0L , 42 , "blue" );
db . write ( foo ); Memperbarui objek dalam database:
foo . setColor ( "orange" );
db . write ( foo ); Menghapus dari database:
db . delete ( foo ); Menulis Pernyataan Log:
logger . logDebug (() -> "hello" );Menguras dokumen HTML:
List < HtmlParseNode > results = new HtmlParser (). parse ( "<p></p>" );Mencari elemen dalam grafik parsed:
HtmlParseNode node ;
List < HtmlParseNode > results = node . search ( TagName . P , Map . of ());Membuat penangan web baru (fungsi yang menangani permintaan HTTP dan mengembalikan respons):
public Response myHandler ( Request r ) {
return Response . htmlOk ( "<p>Hi world!</p>" );
}Mendaftarkan titik akhir itu:
webFramework . registerPath ( GET , "formentry" , sd :: formEntry );Membangun dan membuat templat:
TemplateProcessor foo = TemplateProcessor . buildProcessor ( "hello {{ name }}" );
String rendered = foo . renderTemplate ( Map . of ( "name" , "world" ));Mendapatkan parameter kueri dari permintaan:
String id = r . requestLine (). queryString (). get ( "id" );Mendapatkan parameter tubuh dari permintaan, sebagai string:
String personId = request . body (). asString ( "person_id" );Dapatkan parameter jalur dari permintaan sebagai string:
Pattern requestRegex = Pattern . compile ( ".well-known/acme-challenge/(?<challengeValue>.*$)" );
final var challengeMatcher = requestRegex . matcher ( request . requestLine (). getPathDetails (). isolatedPath ());
// When the find command is run, it changes state so we can search by matching group
if (! challengeMatcher . find ()) {
return new Response ( StatusLine . StatusCode . CODE_400_BAD_REQUEST );
}
String tokenFileName = challengeMatcher . group ( "challengeValue" );Mendapatkan parameter tubuh dari permintaan, sebagai array byte:
byte [] photoBytes = body . asBytes ( "image_uploads" );Memeriksa pesan log selama pengujian:
assertTrue ( logger . doesMessageExist ( "Bad path requested at readFile: ../testingreadfile.txt" ));