API untuk membuat gambar yang menarik dari produk perusahaan yang terbuat dari cokelat, emas, atau Lego. Implementasi referensi didasarkan pada openai (Dall-E, GPT-3).
Ada beberapa produk perusahaan yang luar biasa dan menarik secara visual yang terbuat dari cokelat atau lego
Terinspirasi oleh kemampuan pembuatan gambar dan teks dari Openai, API ini menghasilkan gambar produk, perusahaan paling dikenal, dan mengubahnya menjadi emas, cokelat, Lego atau bahan lainnya.
Ikuti dokumentasi API yang dihasilkan dan klik tombol "Run in Postman"
Server ini dihasilkan menggunakan proyek generator OpenAPI. Generator Kode, dan kode yang dihasilkan memungkinkan Anda untuk mengembangkan sistem Anda dengan sikap API-First, di mana kontrak API adalah jangkar dan penentu proyek Anda, dan kode dan bisnis Anda bertujuan untuk menyelesaikan dan mematuhi persyaratan dalam Kontrak API.
NodeJS> = 10.6
NPM> = 6.10.0
Kode ini ditulis pada Mac, jadi dengan asumsi semua harus bekerja dengan lancar pada komputer berbasis Linux. Namun, tidak ada alasan untuk tidak menjalankan pustaka ini pada mesin berbasis Windows. Jika Anda menemukan masalah terkait OS, silakan buka masalah dan itu akan diselesaikan.
Gunakan generator openapi untuk menghasilkan aplikasi Anda: dengan asumsi Anda memiliki java (1.8+), dan memiliki toples untuk menghasilkan aplikasi, jalankan: java -jar {path_to_jar_file} generate -g nodejs-express-server -i {openapi yaml/json file} -o {target_directory_where_the_app_will_be_installed}
jika Anda tidak memiliki toples, atau tidak ingin menjalankan Java dari mesin lokal Anda, ikuti instruksi di halaman Openapitools. Anda dapat menjalankan skrip secara online, di Docker, dan berbagai cara lainnya.
Buka direktori yang dihasilkan yang Anda tentukan. Ada server NodeJS-ExpressJS yang berfungsi sepenuhnya menunggu Anda. Ini penting - kode adalah milik Anda untuk diubah dan diperbarui! Lihatlah config.js dan lihat bahwa pengaturan di sana baik -baik saja dengan Anda - server akan berjalan pada port 3000, dan file akan diunggah ke direktori baru 'unggah_files'.
Server akan didasarkan pada file openapi.yaml yang terletak di bawah /api/openapi.yaml. Ini bukan file yang persis sama dengan yang Anda gunakan untuk menghasilkan aplikasi: I. Jika Anda memiliki application/json
contentbody yang didefinisikan di dalam objek path - hasilnya akan memindahkannya ke bagian komponen/skema dari dokumen OpenAPI. Ii. Setiap proses memiliki elemen baru yang ditambahkan ke dalamnya- x-eov-operation-handler: controllers/PetController
yang mengarahkan panggilan ke file itu. AKU AKU AKU. Kami memiliki aplikasi Java yang menerjemahkan OperationID ke suatu metode, dan skrip NodeJS yang melakukan proses yang sama untuk memanggil metode itu. Keduanya mengubah metode ini menjadi camelCase
, tetapi mungkin memiliki perbedaan. Harap perhatikan nama OperationID, dan lihat bahwa mereka diwakili dalam direktori controllers
dan services
.
Luangkan waktu untuk memahami struktur aplikasi. Mungkin ada bug, dan mungkin ada pengaturan dan logika bisnis yang tidak memenuhi harapan Anda. Alih -alih membuang solusi ini dan mencari sesuatu yang lain - lihat apakah Anda dapat membuat kode yang dihasilkan berfungsi untuk Anda. Agar penjelasannya singkat (penjelasan yang lebih rinci akan mengikuti): Aplikasi dimulai dengan panggilan ke index.js (di sinilah Anda akan mencolokkan DB nanti). Ini memanggil ExpressServer.js yang merupakan tempat Express.js dan OpenAPi-validator menendang. Ini adalah file yang penting. Pelajari. Semua panggilan ke titik akhir yang dikonfigurasi dalam dokumen openapi.yaml pergi ke controllers/{name_of_tag_which_the_operation_was_associated_with}.js
, yang merupakan metode yang sangat kecil. Semua logius bisnis terletak pada controllers/Controller.js
, dan dari sana - ke services/{name_of_tag_which_the_operation_was_associated_with}.js
.
Setelah Anda mengerti apa yang akan terjadi, luncurkan aplikasi dan pastikan semuanya berfungsi seperti yang diharapkan:
npm start
(Dengan asumsi tidak ada perubahan yang dilakukan ke config.js)
Dokumentasi API, dan untuk memeriksa titik akhir yang tersedia: http: // localhost: 3000/API-docs/. Ke
Unduh dokumen openapi.yaml: http: // localhost: 3000/openapi.
Setiap panggilan ke titik akhir yang didefinisikan dalam dokumen OpenAPI akan mengembalikan 200 dan daftar semua parameter dan objek yang dikirim dalam permintaan.
Titik akhir yang membutuhkan keamanan harus membuat penangan keamanan dikonfigurasi sebelum mereka dapat mengembalikan respons yang berhasil. Pada titik ini mereka akan mengembalikan kode respons 401.
Di direktori root yang kami miliki (selain paket.json, config.js, dan file log):
Logger.js - Di mana kami mendefinisikan logger untuk proyek. Proyek ini menggunakan Winston, tetapi tujuan dari file ini adalah untuk memungkinkan pengguna mengubah dan memodifikasi perilaku logger mereka sendiri.
Index.js - Ini adalah file 'utama' proyek, dan dari sini kami meluncurkan aplikasi. Ini adalah file yang sangat pendek dan ringkas, dan ide di balik peluncuran dari file pendek ini adalah untuk memungkinkan kasus penggunaan meluncurkan server dengan parameter yang berbeda (mengubah konfigurasi dan/atau logger) tanpa mempengaruhi sisa kode.
ExpressServer.js - Inti dari server Express.js. Di sinilah server Express diinisialisasi, bersama dengan validator OpenAPI, OpenAPI UI, dan perpustakaan lain yang diperlukan untuk memulai server kami. Jika kami ingin menambahkan tautan eksternal, di situlah mereka akan pergi. Proyek kami menggunakan perpustakaan ekspres-openapi-validator yang bertindak sebagai langkah pertama dalam proses perutean-permintaan yang diarahkan ke jalur yang ditentukan dalam file openapi.yaml
ditangkap oleh proses ini, dan parameter dan konten tubuhnya divalidasi terhadap skema tersebut . Hasil yang berhasil dari validasi ini akan menjadi objek 'OpenAPI' baru yang ditambahkan ke permintaan. Jika jalur yang diminta bukan bagian dari file OpenAPI.YAML, validator mengabaikan permintaan dan meneruskannya, seperti apa adanya, turun aliran server ekspres.
OpenAPI.YAML - Ini adalah kontrak OpenAPI yang akan dipatuhi server ini. File ini dihasilkan menggunakan codegen, dan harus berisi semua yang diperlukan untuk menjalankan gateway API - tidak ada referensi untuk model/skema eksternal.
Saat ini satu file:
Openapirouter.js - Di sinilah routing ke kode back -end kami terjadi. Jika objek permintaan menyertakan objek openapi
, ia mengambil nilai-nilai berikut (yang merupakan bagian dari file openapi.yaml
): 'X-Openapi-Router-Controller', dan 'X-Openapi-Router-Service'. Variabel -variabel ini adalah nama file/kelas masing -masing di direktori pengontrol dan layanan. Operasi dari permintaan juga diekstraksi. OperationID adalah metode dalam pengontrol dan layanan yang dihasilkan sebagai bagian dari proses codegen. Proses perutean mengirimkan objek permintaan dan respons ke pengontrol, yang akan mengekstraksi variabel yang diharapkan dari permintaan, dan mengirimkannya untuk diproses oleh Layanan, mengembalikan respons dari Layanan ke Penelepon.
Setelah memvalidasi permintaan, dan memastikan ini milik Gateway API kami, kami mengirim permintaan ke controller
, di mana variabel dan parameter diekstraksi dari permintaan dan dikirim ke service
yang relevan untuk diproses. controller
menangani respons dari service
dan membangun respons HTTP yang sesuai untuk dikirim kembali ke pengguna.
Index.js - Muat semua pengontrol yang dihasilkan untuk proyek ini, dan mengekspornya untuk digunakan secara dinamis oleh openapiRouter.js
. Jika Anda ingin menyesuaikan pengontrol Anda, disarankan agar Anda menautkan ke pengontrol Anda di sini, dan memastikan bahwa codegen tidak menulis ulang file ini.
Controller.js - Prosesor inti dari pengontrol yang dihasilkan. Pengendali yang dihasilkan dirancang untuk menjadi ramping dan generik mungkin, merujuk pada Controller.js
untuk logika bisnis parsing variabel dan argumen yang diperlukan dari permintaan, dan untuk membangun respons HTTP yang akan dikirim kembali. Controller.js
adalah kelas dengan metode statis.
.js - kode yang dihasilkan otomatis, memproses semua operasi. Pengontrol adalah kelas yang dibangun dengan kelas layanan yang akan dikirimkan permintaan. Setiap permintaan yang ditentukan oleh openapi.yaml
memiliki operasi. OperationID adalah nama metode yang akan dipanggil. Setiap metode menerima permintaan dan respons, dan memanggil Controller.js
untuk memproses permintaan dan respons, menambahkan metode layanan yang harus dipanggil untuk pemrosesan bisnis-logika yang sebenarnya.
Di sinilah API Gateway berakhir, dan logik bisnis yang unik dari aplikasi Anda dimulai. Setiap titik akhir di openapi.yaml
memiliki variabel 'x-openapi-router-service', yang merupakan nama kelas layanan yaitu dihasilkan. Operasi dari titik akhir adalah nama metode yang akan dipanggil. Kode yang dihasilkan memberikan janji sederhana dengan klausa cobalah/tangkap. Operasi yang Service.js
diakhiri dengan panggilan ke Service.js
generik. Dianjurkan agar layanan dihasilkan secara otomatis sekali, dan setelah metode penambahan awal.
Index.js - Muat semua layanan yang dihasilkan untuk proyek ini, dan mengekspornya untuk digunakan secara dinamis oleh openapiRouter.js
. Jika Anda ingin menyesuaikan layanan Anda, disarankan agar Anda menautkan ke pengontrol Anda di sini, dan memastikan bahwa codegen tidak menulis ulang file ini.
Service.js - Kelas utilitas, sangat sederhana dan tipis pada titik ini, dengan dua metode statis untuk membangun objek respons untuk hasil yang berhasil dan gagal dalam operasi layanan. Kode respons default adalah 200 untuk sukses dan 500 untuk kegagalan. Disarankan untuk mengirim kode respons yang lebih akurat dan mengganti default ini jika relevan.
.js - kode yang dihasilkan otomatis, memberikan janji rintisan untuk setiap operasi yang ditentukan dalam openapi.yaml
. Setiap metode menerima variabel yang didefinisikan dalam file openapi.yaml
, dan membungkus janji dalam klausa coba/tangkap. Janji tersebut menyelesaikan keberhasilan dan kegagalan dalam panggilan ke kelas Service.js
.
servertests.js - tes validasi server dasar, memeriksa bahwa server sudah habis, bahwa panggilan ke titik akhir dalam ruang lingkup file openapi.yaml
mengembalikan 200, bahwa panggilan ke jalur di luar lingkup itu mengembalikan 200 jika ada dan a 404 jika tidak.
RoutingTests.js - Menjalankan melalui semua titik akhir yang ditentukan dalam openapi.yaml
, dan membangun permintaan dummy untuk mengirim ke server. Mengkonfirmasi bahwa kode respons adalah 200. Pada titik ini permintaan yang berisi XML atau FormData gagal - saat ini mereka tidak didukung di router.
tambahanEndPointstests.js - File uji untuk semua titik akhir yang didefinisikan di luar ruang lingkup openapi.yaml. Mengkonfirmasi bahwa titik akhir ini mengembalikan respons 200 yang berhasil.
Tes di masa depan harus ditulis untuk memastikan bahwa respons dari setiap permintaan yang dikirim harus sesuai dengan struktur yang ditentukan dalam openapi.yaml
. Tes ini akan gagal 100% pada awalnya, dan pekerjaan tim pengembangan adalah untuk menghapus tes ini.
Saat ini konsep menunggu umpan balik. Idenya adalah untuk memiliki objek yang didefinisikan dalam OpenAPI.YAML ACT sebagai model yang dilewatkan di antara modul yang berbeda. Ini akan menyesuaikan programmer untuk berinteraksi menggunakan objek yang ditentukan, daripada objek JSON yang ditentukan secara longgar. Mengingat sifat pemrogram JavaScript, yang ingin bekerja dengan parameter bootstrap mereka sendiri, konsep ini mungkin tidak berfungsi. Menjaga ini di sini untuk diskusi dan umpan balik di masa depan.