API를 사용하여 명령줄을 통해 Luke 찾기
IDE나 프레임워크 없이 알려진 Starwars APISwapi에서 Luke라는 단어를 찾아야 하지만 마지막 장의 지식을 사용하겠습니다.
다음 수업:
public class SearchingInStarWarsFor {
public static void main(String[] args) {
if (args.length > 0)
StarWarsWordFinder.searchingFor(args[0]);
}
}
이 StarWarsWordFinder의 다음 사양은 다음과 같습니다.
두 목표를 모두 달성하려면 다음이 포함된 JDK 라이브러리만 있으면 됩니다.
java.net 다음을 포함하는 패키지:
URI → 요청을 해결하기 위해.
http 하위 패키지:
HttpClient → 요청을 보내고 응답을 검색합니다.
HttpRequest → 요청을 빌드합니다.
HttpResponse → 응답 개체.
다음과 같은 유사한 코드를 얻습니다.
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class StarWarsWordFinder {
static final String STARWARS_URL_PEOPLE_API = "https://swapi.dev/api/people";
static int foundTimes = 0;
public static void searchingFor(String word) {
HttpClient httpClient = HttpClient.newHttpClient();
HttpRequest httpRequest = HttpRequest
.newBuilder(URI.create(STARWARS_URL_PEOPLE_API))
.GET()
.build();
httpClient.sendAsync(httpRequest, HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::body)
.thenAccept(results -> searchingIn(results, word))
.join();
System.out.println(String.format("%s was found %s times", word, foundTimes));
}
static void searchingIn(String results, String arg) {
if (results.contains(arg))
foundTimes++;
}
}
Java 라이브러리 만들기 장에서 설명한 대로 이 소스를 컴파일하여 라이브러리를 생성하고 다음 터미널 명령을 실행합니다.
java -cp .\starWarsWordFinder.jar .\SearchingInStarWarsFor.java Luke
#it prints
Luke was found 1 times
요다와 함께 해봅시다:
java -cp .\starWarsWordFinder.jar .\SearchingInStarWarsFor.java Yoda
#it prints
Yoda was found 0 times
오! “Forget someone API인 듯...”🤣
Vader로 시도해 봅시다.
java -cp .\starWarsWordFinder.jar .\SearchingInStarWarsFor.java Vader
#it prints
Vader was found 1 times
"나는 당신의 API 아빠입니다..."좋아, 오래된 스타워즈 농담은 이제 그만!
라이브러리의 코드로 돌아가서 다른 것을 시도해 봅시다. API 문자열 json 응답을 개체로 변환하기 위해 외부 라이브러리를 추가하여 사람들의 이름 범위 측면에서만 좀 더 구체적으로 만들 수 있습니다.
Gson 라이브러리는 JSON에 대한 문자열 응답을 파싱할 수 있습니다.
Gson의 fromJson() 메서드를 추가한 후 StarWarsWordFinder 코드의 소스를 살펴보겠습니다.
import com.google.gson.Gson;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.List;
public class StarWarsWordFinderWithGson {
//same as last version class
static void searchingIn(String results, String arg) {
Gson gson = new Gson();
StarWarsPeople starWarsPeople = gson.fromJson(results, StarWarsPeople.class);
for(StarWarsPerson starWarsPerson: starWarsPeople.getResults()) {
if (starWarsPerson.getName().contains(arg))
foundTimes++;
}
}
class StarWarsPeople {
private List<StarWarsPerson> results;
public List<StarWarsPerson> getResults() {
return results;
}
}
class StarWarsPerson {
private String name;
public String getName() {
return name;
}
}
}
두 개의 추가 클래스를 만들어야 했습니다.
문자열 결과를 유효한 구조에 매핑합니다.
따라서 다음 명령을 실행합니다.
javac -cp .\gson-2.9.0.jar -d build .\StarWarsWordFinderWithGson.java #to get .class files
jar --create --file starWarsWordFinder.jar .\StarWarsWordFinderWithGson.class '.\StarWarsWordFinderWithGson$StarWarsPeople.class'
'.\StarWarsWordFinderWithGson$StarWarsPerson.class' #to create the jar file
내 라이브러리 StarWarsWordFinderWithGson의 새 버전을 얻은 다음 기본 클래스를 실행하고 2개의 jar, gson 및 starWarsWordFinder 라이브러리를 추가할 수 있습니다.
java -cp "starWarsWordFinder.jar;gson-2.9.0.jar" .\SearchingInStarWarsWithGson.java Luke
#it prints
Luke was found 1 times
그래서 간단히 요약하자면
이것은 수제 시리즈의 끝입니다.
Create a jar .
Build a service using a known framework .
제가 글을 쓰면서 즐거웠던 것처럼 여러분도 즐거우셨기를 바랍니다. 곧 더 많은 것이 있습니다.
기술 스택
레포
https://github.com/JesusIgnacio/starwars-word-finder
Reference
이 문제에 관하여(API를 사용하여 명령줄을 통해 Luke 찾기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/to_code/finding-luke-through-the-command-line-by-consuming-an-api-odp텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)