cari
RumahJavajavaTutorialCara SpringBoot menggunakan GraphQL untuk membangunkan API Web

Cara SpringBoot menggunakan GraphQL untuk membangunkan API Web

May 13, 2023 am 10:52 AM
apigraphqlspringboot

Kata Pengantar

API Restful tradisional mempunyai banyak masalah Pertama sekali, ia tidak dapat mengawal medan yang dikembalikan, dan bahagian hadapan tidak boleh meramalkan hasil pengembalian bahagian belakang ke alamat permintaan yang berbeza. Ini mengakibatkan berbilang permintaan. GraphQL ialah bahasa pertanyaan API yang dibina berdasarkan latar belakang ini Berbanding dengan API Restful tradisional, ia mempunyai kelebihan berikut:

  • Fleksibiliti: GraphQL boleh fleksibel mengikut keperluan pelanggan. Tanya data dengan cekap dan bukannya mengembalikan data berstruktur tetap seperti RESTful API.

  • Kurangkan permintaan rangkaian: GraphQL membenarkan pelanggan mengambil berbilang sumber dalam satu permintaan, yang membantu mengurangkan bilangan permintaan rangkaian dan meningkatkan prestasi.

  • Penaipan yang kuat: GraphQL mempunyai sistem taip kuat yang membolehkan pelanggan mengesan ralat dalam pertanyaan pada masa penyusunan, yang membantu mengurangkan ralat masa jalan.

  • Boleh Dicache: GraphQL boleh dicache, yang bermaksud pelayan boleh menyimpan hasil pertanyaan, meningkatkan prestasi dan kebolehskalaan.

  • Dokumentasi: GraphQL mempunyai keupayaan untuk mendokumentasikan diri, membolehkan pembangun memahami dengan cepat struktur dan fungsi API.

Pelan pelaksanaan GraphQL dalam Spring Boot

Jika bahasa back-end ialah Java, maka GraphQL Java ialah perpustakaan asas untuk melaksanakan GraphQL. Selain itu, Spring telah menyepadukan GraphQL Jika Spring digunakan dalam projek, Spring GraphQL lebih disyorkan.

Pembangunan Spring GraphQL secara amnya dibahagikan kepada langkah berikut

Tambah kebergantungan Spring GraphQL

Tambah kebergantungan Spring GraphQL dalam projek anda. Anda boleh menambah kebergantungan melalui alat binaan seperti Maven atau Gradle. Sebagai contoh, jika anda menggunakan Maven, anda boleh menambah kebergantungan berikut

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-graphql</artifactId>
        </dependency>

Define GraphQL Schema

Define GraphQL Schema dalam aplikasi anda. Skema mentakrifkan jenis dan medan yang boleh ditanya. Anda boleh mentakrifkan skema menggunakan SDL (Schema Definition Language) atau secara pengaturcaraan.

Untuk projek Spring Boot, fail skema diletakkan dalam direktori resources/graphql/ dan nama fail diakhiri dengan graphqls Berikut ialah schema.graphqls ringkas yang saya takrifkan.

Ia menentukan dua pelaksanaan pertanyaan author(id:Int) bermaksud menanyakan Pengarang dengan id, dan allAuthors bermaksud menanyakan tatasusunan Pengarang.

skema {
pertanyaan: Pertanyaan
}

taip Pertanyaan {
pengarang(id:Int): Pengarang
semuaPengarang: [Pengarang]
}

taip Pengarang {
id:Int
firstName:String
lastName:String
e-mel:String
tarikh lahir:String
}

Melaksanakan RuntimeWiringConfigurer

RuntimeWiringConfigurer ialah teras pelaksanaan GraphQL untuk mendapatkan data Menggunakan GraphQL tidak boleh langsung mengalih keluar rangka kerja lapisan kegigihan seperti Mybatis/Jpa .

RuntimeWiringConfigurer adalah serupa dengan lapisan perkhidmatan dalam Spring, yang merupakan teras pelaksanaan data asas.

Berikut ialah contoh mudah:

@Component
public class AuthorWiring implements RuntimeWiringConfigurer {
    private final AuthorRepository authorRepository;
    public AuthorWiring(AuthorRepository authorRepository) {
        this.authorRepository = authorRepository;
    }
    @Override
    public void configure(RuntimeWiring.Builder builder) {
        builder.type("Query", typeWiring -> typeWiring
                        .dataFetcher("allAuthors", environment -> authorRepository.findAll())
                        .dataFetcher("author", environment -> authorRepository.getReferenceById(environment.getArgument("id")))
    }
}

Di sini, dua objek DataFetcher ditakrifkan di dalam kaedah konfigurasi untuk menentukan cara pengarang dan semua Pengarang bertanyakan data ia masih melalui JPA Data pertanyaan.

Define GraphQL Controller

Kami mentakrifkan GraphQLController untuk menerima parameter input permintaan web Contohnya adalah seperti berikut:

@RestController
@RequestMapping("graphql")
public class GraphQLController {
    private final GraphQL graphQL;
    @Autowired
    public GraphQLController(GraphQlSource graphQlSource) {
        graphQL = graphQlSource.graphQl();
    }
    @PostMapping("query")
    public ResponseEntity<Object> query(@RequestBody String query) {
        ExecutionResult result = graphQL.execute(query);
        return ResponseEntity.ok(result.getData());
    }
}

Objek GraphQL dalam kod adalah pintu masuk ke. laksanakan pertanyaan, tetapi GraphQL Terdapat hanya satu pembina peribadi, jadi ia tidak boleh disuntik secara langsung Anda mesti mendapatkan objek GraphQL dengan menyuntik GraphQlSource.

Perhatikan bahawa dalam GraphQL kita hanya boleh menggunakan String untuk menerima parameter dan tidak boleh menggunakan objek model Ini kerana parameter permintaan Graf bukan struktur json.

Permintaan Graf Uji

Kami mencipta fail graphql.http untuk melaksanakan permintaan http dalam idea

### Hantar permintaan POST dengan badan json
POST http://localhost:8080/graphql/query
Content-Type: application/json

{
author(id: 1) {
id
firstName
lastName
tarikh lahir
}
}

### Hantar permintaan POST dengan badan json
POST http://localhost:8080/graphql/query
Kandungan -Jenis: aplikasi /json

{
allAuthors {
id
firstName
lastName
tarikh lahir
}
}

Jalankan pertanyaan untuk pengarang(id: 1) dan anda boleh melihat bahawa keputusan dikembalikan seperti biasa. Jika kita hanya memerlukan medan FirstName dan LastName, kemudian alih keluar id dan tarikh lahir daripada parameter input permintaan tanpa mengubah sebarang kod back-end.

Cara SpringBoot menggunakan GraphQL untuk membangunkan API Web

Cara SpringBoot menggunakan GraphQL untuk membangunkan API Web

Atas ialah kandungan terperinci Cara SpringBoot menggunakan GraphQL untuk membangunkan API Web. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Artikel ini dikembalikan pada:亿速云. Jika ada pelanggaran, sila hubungi admin@php.cn Padam
Adakah Java masih merupakan bahasa yang baik berdasarkan ciri -ciri baru?Adakah Java masih merupakan bahasa yang baik berdasarkan ciri -ciri baru?May 12, 2025 am 12:12 AM

Javaremainsagoodlanguageduetoitscontinuousevolutionandrobustecosystem.1)

Apa yang menjadikan Java hebat? Ciri dan faedah utamaApa yang menjadikan Java hebat? Ciri dan faedah utamaMay 12, 2025 am 12:11 AM

Javaisgreatduetoitsplatformindantrect, robustoopsupport, extensivelibraries, andstrongcommunity.1) platformindependenceviajvmallowscodetorunonvariousplatforms.2)

Ciri -ciri Java 5 Teratas: Contoh dan PenjelasanCiri -ciri Java 5 Teratas: Contoh dan PenjelasanMay 12, 2025 am 12:09 AM

Lima ciri utama Java adalah polimorfisme, ekspresi lambda, streamsapi, generik dan pengendalian pengecualian. 1. Polimorfisme membolehkan objek kelas yang berbeza digunakan sebagai objek kelas asas biasa. 2. Ekspresi Lambda menjadikan kod lebih ringkas, terutama sesuai untuk mengendalikan koleksi dan aliran. 3.StreamsAPI dengan cekap memproses set data yang besar dan menyokong operasi deklaratif. 4. Generik menyediakan jenis keselamatan dan kebolehgunaan semula, dan kesilapan jenis ditangkap semasa penyusunan. 5. Pengendalian Pengecualian membantu mengendalikan kesilapan dengan elegan dan menulis perisian yang boleh dipercayai.

Bagaimanakah ciri utama Java mempengaruhi prestasi dan skalabiliti?Bagaimanakah ciri utama Java mempengaruhi prestasi dan skalabiliti?May 12, 2025 am 12:08 AM

Java'stopfeaturessignificantelyedhanceitsperformanceAndscalability.1) Objek-OrientedPrincipleslikePolymorphismenableFlexiBleyDscalableCode.2)

JVM Internals: Menyelam jauh ke dalam mesin maya JavaJVM Internals: Menyelam jauh ke dalam mesin maya JavaMay 12, 2025 am 12:07 AM

Komponen teras JVM termasuk ClassLoader, Runtimedataarea dan ExecutionEngine. 1) Pemuat kelas bertanggungjawab untuk memuatkan, menghubungkan dan memulakan kelas dan antara muka. 2) Runtimedataarea mengandungi Methodarea, Heap, Stack, Pcregister dan Nativemethodstacks. 3) ExecutionEngine terdiri daripada penterjemah, Jitcompiler dan GarbageCollector, yang bertanggungjawab untuk pelaksanaan dan pengoptimuman bytecode.

Apakah ciri -ciri yang menjadikan Java selamat dan selamat?Apakah ciri -ciri yang menjadikan Java selamat dan selamat?May 11, 2025 am 12:07 AM

Java'sSafetyandSecurityArebolsteredby: 1) Strongtyping, whichPreventStype-RelatedErrors; 2) AutomaticMemoryManagementViagriageGecollection, reducingMemory-RelatedVulnerabilities;

Ciri-ciri Java Harus tahu: Meningkatkan Kemahiran Pengekodan AndaCiri-ciri Java Harus tahu: Meningkatkan Kemahiran Pengekodan AndaMay 11, 2025 am 12:07 AM

JavaoffersSeveralkeyfeaturesthatenHanceCodingsKills: 1) Objek-OrientedProgrammingallowSmodelingReal-Worldentities, exemplifiedBypolymorphism.2) ExceptleHandlingProvidesRobusRrormAragement.3)

Jvm panduan paling lengkapJvm panduan paling lengkapMay 11, 2025 am 12:06 AM

TheJvmisacrucialComponentthatrunsjavacodeByTranslatingitintomachine-specificinstructions, impak, keselamatan, andporability.1) theclassloaderloads, pautan, andinitializesclasses.2)

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Nordhold: Sistem Fusion, dijelaskan
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Cara Membuka Kunci Cangkuk Bergelut
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

SecLists

SecLists

SecLists ialah rakan penguji keselamatan muktamad. Ia ialah koleksi pelbagai jenis senarai yang kerap digunakan semasa penilaian keselamatan, semuanya di satu tempat. SecLists membantu menjadikan ujian keselamatan lebih cekap dan produktif dengan menyediakan semua senarai yang mungkin diperlukan oleh penguji keselamatan dengan mudah. Jenis senarai termasuk nama pengguna, kata laluan, URL, muatan kabur, corak data sensitif, cangkerang web dan banyak lagi. Penguji hanya boleh menarik repositori ini ke mesin ujian baharu dan dia akan mempunyai akses kepada setiap jenis senarai yang dia perlukan.

Dreamweaver Mac版

Dreamweaver Mac版

Alat pembangunan web visual

MinGW - GNU Minimalis untuk Windows

MinGW - GNU Minimalis untuk Windows

Projek ini dalam proses untuk dipindahkan ke osdn.net/projects/mingw, anda boleh terus mengikuti kami di sana. MinGW: Port Windows asli bagi GNU Compiler Collection (GCC), perpustakaan import yang boleh diedarkan secara bebas dan fail pengepala untuk membina aplikasi Windows asli termasuk sambungan kepada masa jalan MSVC untuk menyokong fungsi C99. Semua perisian MinGW boleh dijalankan pada platform Windows 64-bit.

SublimeText3 versi Inggeris

SublimeText3 versi Inggeris

Disyorkan: Versi Win, menyokong gesaan kod!

Versi Mac WebStorm

Versi Mac WebStorm

Alat pembangunan JavaScript yang berguna