paint-brush
Sida Loo Soo Bandhigo API Cusub Si Dhakhso leh Isticmaalka Bootka Guga iyo Gradleby@johnjvester
Taariikh cusub

Sida Loo Soo Bandhigo API Cusub Si Dhakhso leh Isticmaalka Bootka Guga iyo Gradle

by John Vester14m2025/03/24
Read on Terminal Reader

Aad u dheer; In la akhriyo

Waqtiga suuqgeyntu wuxuu samayn karaa ama jebin karaa fikrad ama xal kasta. Fiiri sida ugu dhakhsaha badan ee RESTful API loo abuuri karo iyadoo la adeegsanaayo ChatGPT, Boot Guga, Gradle, iyo Heroku.
featured image - Sida Loo Soo Bandhigo API Cusub Si Dhakhso leh Isticmaalka Bootka Guga iyo Gradle
John Vester HackerNoon profile picture
0-item
1-item
2-item


Shantii sano ee la soo dhaafay, waxaan lahaa oraah ah "wax walbaa waxay ku bilowdaan fikrad" derbiga xafiiskayga.


Xaaskayga ayaa alaabtan ka heshay Etsy waxyar kadib markii aan bilaabay samaynta ururinta API ee codsiga jirdhiska. Waan jeclahay bayaankan sababtoo ah waxay qabataa dareenka i cunaya inta lagu jiro marxaladaha abuurista ee mashruuc cusub. Tani weli waa arrin aan ugu jeclahay injineernimada, xitaa soddon sano oo shaqo ah.


Waxa aan bartay muddadan waa in fikraddu ay muhiim tahay oo keliya haddii qof uu fursad u helo inuu la kulmo. Haddii fikradu ay qaadato wakhti dheer si ay u noqoto mid dhab ah, waxaad ku dhamaanaysaa fursad aad lumisay sida qof kale uu kuugu garaaco. Tani waa sababta ay kuwa bilawga ahi had iyo jeer u tartamaan si ay fikradahooda u helaan suuqa sida ugu dhakhsaha badan ee suurtogalka ah.


Aan dhex marno sida aan fikrad uga dhigi karno mid dhab ah… si degdeg ah.

Malaha

Maqaalkan, waxaan u dhigi doonaa wax fudud. Waxaan isticmaali doonaa Java 17 iyo Spring Boot 3 si aan u abuurno API RESTful ah. Tusaalahan, waxaan u isticmaali doonaa Gradle dhismaha otomaatiga.


Iyadoo fikradda adeegga aan qorsheynayno inaan u qaadno suuqa ay caadi ahaan isticmaali doonto lakabka adkaysiga, waxaan taas dhinac u dhigi doonaa tusaalahan oo aan si qeexan u qeexi doono xogtayada gudaha fasalka kaydka.


Ka werwerin mayno inaanu ku darno wax ammaan ah tusaalahan, iyadoo si fudud u oggolaanaysa gelitaanka qarsoodiga caddaynta fikraddan.

Xigashooyinka Dhiirigelinta API

Aynu ka soo qaadno fikradayadu inay tahay xigashooyinka dhiirigelinta API. Si loo hubiyo inaan u tartamayno sida ugu dhakhsaha badan ee suurtogalka ah, waxaan ka codsaday ChatGPT inay ii abuurto tafatirka OpenAPI.


Daqiiqado gudahood, ChatGPT waxay bixisay jawaabta:


Waa kan qeexitaanka OpenAPI, gudaha YAML, ee ChatGPT soo saartay:


 openapi: 3.0.0 info: title: Motivational Quotes API description: An API that provides motivational quotes. version: 1.0.0 servers: - url: https://api.example.com description: Production server paths: /quotes: get: summary: Get all motivational quotes operationId: getAllQuotes responses: '200': description: A list of motivational quotes content: application/json: schema: type: array items: $ref: '#/components/schemas/Quote' /quotes/random: get: summary: Get a random motivational quote operationId: getRandomQuote responses: '200': description: A random motivational quote content: application/json: schema: $ref: '#/components/schemas/Quote' /quotes/{id}: get: summary: Get a motivational quote by ID operationId: getQuoteById parameters: - name: id in: path required: true schema: type: integer responses: '200': description: A motivational quote content: application/json: schema: $ref: '#/components/schemas/Quote' '404': description: Quote not found components: schemas: Quote: type: object required: - id - quote properties: id: type: integer quote: type: string


Waxa kaliya oo aan u baahday in aan sameeyo hal casriyeyn oo gacanta ah—anaga oo hubinaya in id iyo hantida quote loo baahan yahay qorshaha Quote . Taasina waa kaliya sababtoo ah waxaan illoobay inaan ku xuso xannibaadda ChatGPT degdeggeyga asalka ah.

Taas, waxaan diyaar u nahay inaan horumarino adeegga cusub anagoo adeegsanayna habka API-First .

Dhisidda Adeegga Bootka Gu'ga Isticmaalka API-Marka hore

Tusaalahan, waxaan isticmaali doonaa Spring Boot CLI si aan u abuuro mashruuc cusub. Waa kuwan sida aad ugu rakibi karto CLI adoo isticmaalaya Homebrew:


 $ brew tap spring-io/tap $ brew install spring-boot

Abuur Adeeg Boot Guga cusub

Waxaan u yeeri doonaa quotes mashruuca, iyaga oo ku abuuraya amarka soo socda:


 $ spring init --dependencies=web quotes


Aynu eegno waxa ku jira galka quotes :


 $ cd quotes && ls -la total 72 drwxr-xr-x@ 11 jvester 352 Mar 1 10:57 . drwxrwxrwx@ 90 jvester 2880 Mar 1 10:57 .. -rw-r--r--@ 1 jvester 54 Mar 1 10:57 .gitattributes -rw-r--r--@ 1 jvester 444 Mar 1 10:57 .gitignore -rw-r--r--@ 1 jvester 960 Mar 1 10:57 HELP.md -rw-r--r--@ 1 jvester 545 Mar 1 10:57 build.gradle drwxr-xr-x@ 3 jvester 96 Mar 1 10:57 gradle -rwxr-xr-x@ 1 jvester 8762 Mar 1 10:57 gradlew -rw-r--r--@ 1 jvester 2966 Mar 1 10:57 gradlew.bat -rw-r--r--@ 1 jvester 28 Mar 1 10:57 settings.gradle drwxr-xr-x@ 4 jvester 128 Mar 1 10:57 src


Marka xigta, waxaan tafatireynaa faylka build.gradle sida hoos ku cad si aan u qaadano habka API-First.


 plugins { id 'java' id 'org.springframework.boot' version '3.4.3' id 'io.spring.dependency-management' version '1.1.7' id 'org.openapi.generator' version '7.12.0' } openApiGenerate { generatorName = "spring" inputSpec = "$rootDir/src/main/resources/static/openapi.yaml" outputDir = "$buildDir/generated" apiPackage = "com.example.api" modelPackage = "com.example.model" configOptions = [ dateLibrary: "java8", interfaceOnly: "true", useSpringBoot3: "true", useBeanValidation: "true", skipDefaultInterface: "true" ] } group = 'com.example' version = '0.0.1-SNAPSHOT' java { toolchain { languageVersion = JavaLanguageVersion.of(17) } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-validation' implementation 'org.openapitools:jackson-databind-nullable:0.2.6' implementation 'io.swagger.core.v3:swagger-annotations:2.2.20' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' testRuntimeOnly 'org.junit.platform:junit-platform-launcher' } sourceSets { main { java { srcDirs += "$buildDir/generated/src/main/java" } } } compileJava.dependsOn tasks.openApiGenerate tasks.named('test') { useJUnitPlatform() }


Ugu dambayntii, waxaanu dhignay qeexitaanka OpenAPI ee la soo saaray kaydka resources/static sida openapi.yaml .

Samee API iyo Model walxaha

Ka dib markii aan mashruuca ka furay IntelliJ, waxaan fuliyay amarka soo socda si aan u dhiso API stubs iyo walxaha moodeelka.


 ./gradlew clean build


Hadda, waxaan arki karnaa api iyo shayada model ee laga sameeyay qeexitaankayada OpenAPI. Waa kan faylka QuotesAPI.java :


Ku dar caqliga ganacsiga

Iyada oo uu diyaarsan yahay adeegga aasaasiga ah oo uu horayba ugu hoggaansamay qandaraaskayaga OpenAPI, waxaan bilaabeynaa in aan ku darno xoogaa macquul ah ganacsiga adeegga.


Marka hore, waxaan abuurnaa fasalRepository QuotesRepository kaaso soo celiya xogta adeegeena. Sida kor lagu soo sheegay, tan caadi ahaan waxa lagu kaydin doonaa lakab adkaysi oo gaar ah. Tusaalahan, si adag-codeing shan xigasho 'qiimaha xogta ayaa si fiican u shaqeysa, oo waxay nagu haysaa diiradda.


 @Repository public class QuotesRepository { public static final List<Quote> QUOTES = List.of( new Quote() .id(1) .quote("The greatest glory in living lies not in never falling, but in rising every time we fall."), new Quote() .id(2) .quote("The way to get started is to quit talking and begin doing."), new Quote() .id(3) .quote("Your time is limited, so don't waste it living someone else's life."), new Quote() .id(4) .quote("If life were predictable it would cease to be life, and be without flavor."), new Quote() .id(5) .quote("If you set your goals ridiculously high and it's a failure, you will fail above everyone else's success.") ); public List<Quote> getAllQuotes() { return QUOTES; } public Optional<Quote> getQuoteById(Integer id) { return Optional.ofNullable(QUOTES.stream().filter(quote -> quote.getId().equals(id)).findFirst().orElse(null)); } }


Marka xigta, waxaan abuurnaa Adeegga QuotesService kaas oo la falgali doona QuotesRepository . Qaadashada habkan waxay xogta ka ilaalin doontaa inay ka soocdo macquulnimada ganacsiga.


 @RequiredArgsConstructor @Service public class QuotesService { private final QuotesRepository quotesRepository; public List<Quote> getAllQuotes() { return quotesRepository.getAllQuotes(); } public Optional<Quote> getQuoteById(Integer id) { return quotesRepository.getQuoteById(id); } public Quote getRandomQuote() { List<Quote> quotes = quotesRepository.getAllQuotes(); return quotes.get(ThreadLocalRandom.current().nextInt(quotes.size())); } }


Ugu dambeyntii, waxaan kaliya u baahanahay inaan hirgelinno QuotesApi ee ka yimid habka API-First:


 @Controller @RequiredArgsConstructor public class QuotesController implements QuotesApi { private final QuotesService quotesService; @Override public ResponseEntity<List<Quote>> getAllQuotes() { return new ResponseEntity<>(quotesService.getAllQuotes(), HttpStatus.OK); } @Override public ResponseEntity<Quote> getQuoteById(Integer id) { return quotesService.getQuoteById(id) .map(quote -> new ResponseEntity<>(quote, HttpStatus.OK)) .orElseGet(() -> new ResponseEntity<>(HttpStatus.NOT_FOUND)); } @Override public ResponseEntity<Quote> getRandomQuote() { return new ResponseEntity<>(quotesService.getRandomQuote(), HttpStatus.OK); } }


Halkaa marka ay marayso, waxa aanu leenahay API Quotes Dhiirigelineed oo si buuxda u shaqaynaysa, oo ay ku dhammaystiran yihiin ururin yar oo jawaabo ah.

Qaybaha ugu dambeeya

Bootka gu'ga wuxuu ina siinayaa ikhtiyaarka is dhexgalka isticmaalaha Swagger Docs ee ku salaysan mareegaha iyada oo loo sii marayo ku tiirsanaanta springdoc-openapi-starter-webmvc-ui .


 dependencies { ... implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.8.5' ... }


Iyadoo qaab-dhismeedku uu u ogolaado injineerada inay isticmaalaan tilmaamo fudud si ay u qeexaan API, waxaan isticmaali karnaa faylka openapi.yaml ee jira ee ku jira resources/static .


Waxaan ku hirgalin karnaa habkan faylka application-properties.yaml , oo ay weheliso dhawr habayn oo kale oo yaryar:


 server: port: ${PORT:8080} spring: application: name: quotes springdoc: swagger-ui: path: /swagger-docs url: openapi.yaml


Kaliya madadaalo, aan ku darno faylka banner.txt si loo isticmaalo marka adeeggu bilaabmo. Faylkan waxaan gelinaa galka resources .


 ${AnsiColor.BLUE} _ __ _ _ _ ___ | |_ ___ ___ / _` | | | |/ _ \| __/ _ \/ __| | (_| | |_| | (_) | || __/\__ \ \__, |\__,_|\___/ \__\___||___/ |_| ${AnsiColor.DEFAULT} :: Running Spring Boot ${AnsiColor.BLUE}${spring-boot.version}${AnsiColor.DEFAULT} :: Port #${AnsiColor.BLUE}${server.port}${AnsiColor.DEFAULT} ::


Hadda, marka aan ka bilowno adeegga gudaha, waxaan arki karnaa banner:


Marka la bilaabo, waxaan xaqiijin karnaa Swagger Docs ay shaqeynayaan annaga oo booqanayna /swagger-docs dhamaadka.



Ugu dambayntii, waxaanu samayn doonaa kayd cusub oo Git ku salaysan si aan ula socono wixii isbedel ah ee mustaqbalka:


 $ git init $ git add . $ git commit -m "Initial commit for the Motivational Quotes API"


Hadda, aan aragno sida ugu dhakhsaha badan ee aan u geyn karno adeeggayaga .

Isticmaalka Heroku si loo dhammeeyo Socdaalka

Ilaa hadda, diiradda koowaad ee soo bandhigida fikradayda cusub waxay ahayd abuurista faahfaahinta OpenAPI iyo qorista qaar ka mid ah macquulnimada ganacsiga adeeggayga. Spring Boot ayaa wax walba oo kale ii qabtay.


Marka ay timaado socodsiinta adeeggayga, waxaan doorbidaa inaan isticmaalo Heroku sababtoo ah waxay ku habboon tahay adeegyada Boot Guga. Waxaan si degdeg ah u hawlgelin karaa adeegyadayda anigoon ku milmin welwelka kaabayaasha daruuriga ah. Heroku sidoo kale wuxuu fududeeyaa in lagu gudbiyo qiyamka qaabeynta ee codsiyadayda ku saleysan Java .


Si loo waafajiyo nooca Java ee aan isticmaaleyno, waxaan ku abuureynaa system.properties file galka xididka mashruuca. Faylku wuxuu leeyahay hal sadar:


 java.runtime.version = 17


Kadib, waxaan ku abuuraa Procfile isla goobta si aan u habeeyo habdhaqanka geynta. Faylkaani wuxuu kaloo leeyahay hal sadar:


 web: java -jar build/libs/quotes-0.0.1-SNAPSHOT.jar


Waa waqtigii la diri lahaa Iyadoo Heroku CLI , waxaan geyn karaa adeegga anigoo isticmaalaya dhowr amarro fudud. Marka hore, waxaan xaqiijiyaa CLI ka dibna waxaan abuuraa barnaamij cusub oo Heroku ah.


 $ heroku login $ heroku create Creating app... done, vast-crag-43256 https://vast-crag-43256-bb5e35ea87de.herokuapp.com/ | https://git.heroku.com/vast-crag-43256.git


Tusaalaha abkayga Heroku waxaa lagu magacaabaa vast-crag-43256 (waxaan ku gudbi karaa magac cayiman), adeegguna wuxuu ka socon doonaa https://vast-crag-43256-bb5e35ea87de.herokuapp.com/.


Waxa ugu dambeeya ee la sameeyo waa in la geeyo adeegga adiga oo isticmaalaya amarka Git si aad ugu riixdo koodka Heroku:


 $ git push heroku master


Marka amarkan la dhammeeyo, waxaan ku xaqiijin karnaa geynta guusha leh anagoo adeegsanayna dashboardka Heroku:


Hadda, waxaan diyaar u nahay inaan u qaadno adeeggayaga cusub ee wadista tijaabada ah!

Xigashooyinka Dhiirigelinta ee Ficilka

Adeegga Xigashooyinka Dhiirigelinta ee ku shaqeeya Heroku, waxaan xaqiijin karnaa wax walba inay u shaqeynayaan sidii la filayay anagoo adeegsanayna amarro curl ah.


Marka hore, aan helno liis dhammaystiran oo dhammaan shanta xigasho ee dhiirigelinta ah:


 $ curl \ --location 'https://vast-crag-43256-bb5e35ea87de.herokuapp.com/quotes'


 [ { "id":1, "quote":"The greatest glory in living lies not in never falling, but in rising every time we fall." }, { "id":2, "quote":"The way to get started is to quit talking and begin doing." }, { "id":3, "quote":"Your time is limited, so don't waste it living someone else's life." }, { "id":4, "quote":"If life were predictable it would cease to be life, and be without flavor." }, { "id":5, "quote":"If you set your goals ridiculously high and it's a failure, you will fail above everyone else's success." } ]


Aan soo saarno hal xigasho dhiirigelin leh oo aqoonsi ah:


 $ curl \ --location 'https://vast-crag-43256-bb5e35ea87de.herokuapp.com/quotes/3'


 { "id":3, "quote":"Your time is limited, so don't waste it living someone else's life." }


Aynu helno xigasho dhiirigelin ah oo random ah:


 $ curl --location \ 'https://vast-crag-43256-bb5e35ea87de.herokuapp.com/quotes/random'


 { "id":5, "quote":"If you set your goals ridiculously high and it's a failure, you will fail above everyone else's success." }


Waxaan xitaa baari karnaa Swagger Docs sidoo kale.


Gabagabo

Waqtiga suuqgeyntu wuxuu samayn karaa ama jebin karaa fikrad kasta. Tani waa sababta ay kuwa bilawga ahi ay diiradda u saaraan sidii ay u soo saari lahaayeen hal-abuurkooda sida ugu dhakhsaha badan ee suurtogalka ah. Inta ay qaadanayso in la gaadho xariiqda dhamaadka, waa ay sii badanaysaa khatarta ah in tartame uu kaa hor yimaado.


Akhristayaasheena waxaa laga yaabaa inay dib u xusuustaan bayaanka himiladeyda shaqsiyeed, kaasoo aan dareemayo inuu codsan karo xirfadle IT kasta:


"Wakhtigaga diiradda saar si aad u soo gudbiso sifooyin/shaqo kordhinaysa qiimaha hantida garaadkaaga. Ka faa'iidayso qaababka, alaabta, iyo adeegyada wax kasta oo kale."

- J. Vester


Maqaalkan, waxaan ku aragnay sida Spring Boot u maareeyay wax kasta oo looga baahan yahay si loo hirgeliyo API RESTful. Ka faa'iidaysiga ChatGPT, waxaan xitaa awoodnay inaan ku muujinno ereyada bini'aadamka waxa aan rabno in adeegayagu noqdo, waxayna nagu abuurtay faahfaahinta OpenAPI ee ilbiriqsiyo gudahood. Tani waxay noo ogolaatay inaan ka faa'iidaysano habka API-First. Markii aan diyaargarownay, waxaan awoodnay inaan dhiibno fikraddayada annaga oo adeegsanayna Heroku annagoo soo saarnay dhowr amarro CLI ah.

Bootka gu'ga, ChatGPT, iyo Heroku waxay bixiyeen qaab-dhismeedka iyo adeegyada si aan u sii ahaado mid diirada saaraya xaqiijinta fikradayda. Natiijo ahaan, waxaan awooday inaan u hoggaansamo qoraalka hadafkayga gaarka ah iyo, ka sii muhiimsan, inaan fikradayda si degdeg ah u gudbiyo. Waxa kaliya ee ay ahayd in aan sameeyo waxa ay ahayd in aan diirada saaro macquulka ganacsiga ee ka dambeeya fikradayda-waana sida ay noqon lahayd!


Haddii aad xiisaynayso, koodhka isha ee maqaalkan waxaa laga heli karaa GitLab .


Malin aad u wanaagsan runtii!

L O A D I N G
. . . comments & more!

About Author

John Vester HackerNoon profile picture
John Vester@johnjvester
Information Technology professional with 25+ years expertise in application design and architecture.

HANG TAGS

MAQAALKAN AYAA LAGU SOO BANDHIGAY...