API를 사용하여 명령줄을 통해 Luke 찾기

14288 단어 lukegsonstarwarsjava
이 시리즈의 마지막 장에서는 거의 필요하지 않은 API 응답에서 관련된 Starwars 단어를 찾아야 합니다.

IDE나 프레임워크 없이 알려진 Starwars APISwapi에서 Luke라는 단어를 찾아야 하지만 마지막 장의 지식을 사용하겠습니다.

다음 수업:

public class SearchingInStarWarsFor {

    public static void main(String[] args) {
        if (args.length > 0)
            StarWarsWordFinder.searchingFor(args[0]);
    }
}


이 StarWarsWordFinder의 다음 사양은 다음과 같습니다.
  • Swapi(사람 범위)에 대한 요청(GET)을 실행합니다.
  • API 본문 응답에 내가 검색한 단어가 포함되어 있는지 검색합니다.

  • 두 목표를 모두 달성하려면 다음이 포함된 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
    


    그래서 간단히 요약하자면
  • 단어를 찾아야 합니다.
  • JDK 라이브러리 내부의 도구를 식별하여 이를 달성합니다.
  • 이를 사용하여 Java 라이브러리를 빌드합니다.
  • 기본 프로그램 내에서 인스턴스를 호출하고 호출합니다.
  • 컴파일 및 실행
  • 스타워즈 따분한 농담 좀 해봐...알았어. 아니요.

  • 이것은 수제 시리즈의 끝입니다.
  • Run a Java program with related jar.

  • Create a jar .

  • Build a service using a known framework .
  • API를 사용하고 jar를 생성하여 단어 찾기 Java 프로그램을 빌드하는 데 사용합니다.

  • 제가 글을 쓰면서 즐거웠던 것처럼 여러분도 즐거우셨기를 바랍니다. 곧 더 많은 것이 있습니다.

    기술 스택
  • 자바 11.
  • 윈도우 10.

  • 레포

    https://github.com/JesusIgnacio/starwars-word-finder

    좋은 웹페이지 즐겨찾기