Dalam seni bina perkhidmatan mikro moden, Gerbang API adalah penting. Ia menyediakan satu titik masuk untuk berbilang perkhidmatan, membolehkan kami mengurus permintaan, keselamatan, pengehadan kadar, pengimbangan beban dan banyak lagi. Dalam artikel ini, kami akan meneroka cara untuk menyediakan Gerbang API asas menggunakan Gerbang Awan Musim Bunga dan mengarahkan permintaan ke titik akhir yang berbeza berdasarkan laluan. Kami juga akan menunjukkan cara menggunakan penapis untuk memanipulasi laluan secara dinamik.
Jom selami kod!
Untuk mengikuti, anda memerlukan:
Buat projek Spring Boot baharu dan sertakan kebergantungan Spring Cloud Gateway. Anda boleh melakukan ini dengan mudah dengan menyediakan projek baharu pada Spring Initializr, memilih Spring Boot dan Reactive Spring Cloud Gateway di bawah kebergantungan.
Ini coretan pom.xml:
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>io.projectreactor</groupId> <artifactId>reactor-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-contract-stub-runner</artifactId> <scope>test</scope> </dependency> </dependencies>
Mari konfigurasikan Gateway kami untuk mengendalikan permintaan untuk tiga laluan berbeza:
"Kami akan menggunakan REST Countries API untuk mensimulasikan perkhidmatan mikro lain yang kami ada dalam seni bina kami."
Saya telah mencipta folder yang dipanggil penghala berhampiran fail utama aplikasi. Di dalamnya, kami akan mencipta fail bernama Routes.java di mana kami mentakrifkan laluan kami, mengkonfigurasi setiap laluan dan menggunakan penapis untuk mengarahkan permintaan secara dinamik.
package dev.mspilari.api_gateway.router; import org.springframework.cloud.gateway.route.RouteLocator; import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class Routes { @Bean public RouteLocator routeLocator(RouteLocatorBuilder builder) { return builder.routes() .route("country_route", p -> p .path("/get/country/{name}") .filters(f -> f.setPath("/v3.1/name/{name}")) .uri("https://restcountries.com")) .route("language_route", p -> p .path("/get/language/{name}") .filters(f -> f.setPath("/v3.1/lang/{name}")) .uri("https://restcountries.com")) .route("subregion_route", p -> p .path("/get/subregion/{name}") .filters(f -> f.setPath("/v3.1/subregion/{name}")) .uri("https://restcountries.com")) .build(); } }
Definisi Laluan: kami mentakrifkan setiap laluan menggunakan kaedah laluan, yang mengambil pengecam (cth., country_route) dan lambda yang mentakrifkan laluan.
Padanan Laluan: .path("/get/country/{name}") digunakan untuk memadankan corak URL yang masuk. {name} ialah pembolehubah yang boleh digantikan secara dinamik dengan sebarang nilai, seperti nama negara seperti "Brazil".
Penapis: kami menggunakan SetPath untuk mengubah suai laluan permintaan keluar. Contohnya, .setPath("/v3.1/name/{name}") menulis semula /get/country/{name} kepada /v3.1/name/{name}, titik akhir yang diperlukan oleh REST Countries API.
URI: kami menetapkan uri kepada https://restcountries.com, yang berfungsi sebagai URL asas. Spring Cloud Gateway akan menghantar laluan yang diubah suai ke URI ini.
Mulakan aplikasi Spring Boot anda. Kini, anda boleh membuat permintaan ke Gateway, dan ia akan memajukannya ke titik akhir yang betul.
Cuba arahan berikut dalam terminal anda untuk menguji laluan:
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>io.projectreactor</groupId> <artifactId>reactor-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-contract-stub-runner</artifactId> <scope>test</scope> </dependency> </dependencies>
Setiap permintaan akan dihalakan oleh Gateway ke titik akhir API REST Countries masing-masing, berdasarkan laluan dan parameter.
Jika semuanya dikonfigurasikan dengan betul, anda akan melihat respons yang sepadan dengan apa yang anda perolehi daripada memanggil terus API Negara REST.
Contohnya:
package dev.mspilari.api_gateway.router; import org.springframework.cloud.gateway.route.RouteLocator; import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class Routes { @Bean public RouteLocator routeLocator(RouteLocatorBuilder builder) { return builder.routes() .route("country_route", p -> p .path("/get/country/{name}") .filters(f -> f.setPath("/v3.1/name/{name}")) .uri("https://restcountries.com")) .route("language_route", p -> p .path("/get/language/{name}") .filters(f -> f.setPath("/v3.1/lang/{name}")) .uri("https://restcountries.com")) .route("subregion_route", p -> p .path("/get/subregion/{name}") .filters(f -> f.setPath("/v3.1/subregion/{name}")) .uri("https://restcountries.com")) .build(); } }
Persediaan ini merangkumi asas penghalaan dengan Spring Cloud Gateway. Dalam siaran seterusnya, kami akan meneroka ciri tambahan, seperti:
Atas ialah kandungan terperinci Membina Gerbang API Mudah dengan Gerbang Awan Spring. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!