Fetch and Backend Java Rapid API

API Raw Output

Uses and NFL Statistics API on rapidapi.com to output data on rushing-stats for each team including touchdowns and yards. Uses fetch to ouput the raw JSON data.

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

HttpRequest request = HttpRequest.newBuilder()
		.uri(URI.create("https://nfl-team-stats.p.rapidapi.com/v1/nfl-stats/teams/rushing-stats/defense/2019"))
		.header("X-RapidAPI-Key", "ec6e646230mshf820e393587eb36p16c0b2jsn78339512865b")
		.header("X-RapidAPI-Host", "nfl-team-stats.p.rapidapi.com")
		.method("GET", HttpRequest.BodyPublishers.noBody())
		.build();
HttpResponse<String> response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
{"_embedded":{"teamRushingStatsList":[{"name":"Ravens","yards":1494,"touchdowns":12,"_links":{"rushing-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/rushing-stats/defense/2019"}}},{"name":"49ers","yards":1802,"touchdowns":11,"_links":{"rushing-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/rushing-stats/defense/2019"}}},{"name":"Seahawks","yards":1883,"touchdowns":22,"_links":{"rushing-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/rushing-stats/defense/2019"}}},{"name":"Vikings","yards":1728,"touchdowns":8,"_links":{"rushing-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/rushing-stats/defense/2019"}}},{"name":"Colts","yards":1567,"touchdowns":8,"_links":{"rushing-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/rushing-stats/defense/2019"}}},{"name":"Bills","yards":1649,"touchdowns":12,"_links":{"rushing-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/rushing-stats/defense/2019"}}},{"name":"Eagles","yards":1442,"touchdowns":13,"_links":{"rushing-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/rushing-stats/defense/2019"}}},{"name":"Cowboys","yards":1656,"touchdowns":14,"_links":{"rushing-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/rushing-stats/defense/2019"}}},{"name":"Patriots","yards":1528,"touchdowns":7,"_links":{"rushing-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/rushing-stats/defense/2019"}}},{"name":"Titans","yards":1672,"touchdowns":14,"_links":{"rushing-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/rushing-stats/defense/2019"}}},{"name":"Raiders","yards":1570,"touchdowns":15,"_links":{"rushing-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/rushing-stats/defense/2019"}}},{"name":"Texans","yards":1937,"touchdowns":12,"_links":{"rushing-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/rushing-stats/defense/2019"}}},{"name":"Packers","yards":1921,"touchdowns":15,"_links":{"rushing-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/rushing-stats/defense/2019"}}},{"name":"Broncos","yards":1783,"touchdowns":9,"_links":{"rushing-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/rushing-stats/defense/2019"}}},{"name":"Buccaneers","yards":1181,"touchdowns":11,"_links":{"rushing-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/rushing-stats/defense/2019"}}},{"name":"Lions","yards":1855,"touchdowns":13,"_links":{"rushing-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/rushing-stats/defense/2019"}}},{"name":"Saints","yards":1461,"touchdowns":12,"_links":{"rushing-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/rushing-stats/defense/2019"}}},{"name":"Rams","yards":1809,"touchdowns":15,"_links":{"rushing-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/rushing-stats/defense/2019"}}},{"name":"Cardinals","yards":1922,"touchdowns":9,"_links":{"rushing-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/rushing-stats/defense/2019"}}},{"name":"Bears","yards":1632,"touchdowns":16,"_links":{"rushing-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/rushing-stats/defense/2019"}}},{"name":"Steelers","yards":1753,"touchdowns":7,"_links":{"rushing-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/rushing-stats/defense/2019"}}},{"name":"Browns","yards":2315,"touchdowns":19,"_links":{"rushing-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/rushing-stats/defense/2019"}}},{"name":"Jaguars","yards":2229,"touchdowns":23,"_links":{"rushing-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/rushing-stats/defense/2019"}}},{"name":"Panthers","yards":2296,"touchdowns":31,"_links":{"rushing-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/rushing-stats/defense/2019"}}},{"name":"Bengals","yards":2382,"touchdowns":17,"_links":{"rushing-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/rushing-stats/defense/2019"}}},{"name":"Jets","yards":1391,"touchdowns":12,"_links":{"rushing-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/rushing-stats/defense/2019"}}},{"name":"Chiefs","yards":2051,"touchdowns":14,"_links":{"rushing-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/rushing-stats/defense/2019"}}},{"name":"Chargers","yards":1805,"touchdowns":15,"_links":{"rushing-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/rushing-stats/defense/2019"}}},{"name":"Falcons","yards":1775,"touchdowns":13,"_links":{"rushing-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/rushing-stats/defense/2019"}}},{"name":"Giants","yards":1812,"touchdowns":19,"_links":{"rushing-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/rushing-stats/defense/2019"}}},{"name":"Redskins","yards":2339,"touchdowns":14,"_links":{"rushing-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/rushing-stats/defense/2019"}}},{"name":"Dolphins","yards":2166,"touchdowns":15,"_links":{"rushing-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/rushing-stats/defense/2019"}}}]},"_links":{"self":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/rushing-stats/defense/2019"}}}

Build a Web Service

This code allows more control in the Backend of the API only calling it once a day. Outputs the raw JSON data for the receiving-stats of all NFL teams including touchdowns and yards.

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

HttpRequest request = HttpRequest.newBuilder()
		.uri(URI.create("https://nfl-team-stats.p.rapidapi.com/v1/nfl-stats/teams/receiving-stats/offense/2019"))
		.header("X-RapidAPI-Key", "ec6e646230mshf820e393587eb36p16c0b2jsn78339512865b")
		.header("X-RapidAPI-Host", "nfl-team-stats.p.rapidapi.com")
		.method("GET", HttpRequest.BodyPublishers.noBody())
		.build();
HttpResponse<String> response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.Date;
import java.util.HashMap;

import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

@RestController // annotation to create a RESTful web services
@RequestMapping("/api/nfl")  //prefix of API
public class CovidApiController {
    private JSONObject body; //last run result
    private HttpStatus status; //last run status
    String last_run = null; //last run day of month

    // GET Covid 19 Stats
    @GetMapping("/daily")   //added to end of prefix as endpoint
    public ResponseEntity<JSONObject> getCovid() {

        //calls API once a day, sets body and status properties
        String today = new Date().toString().substring(0,10); 
        if (last_run == null || !today.equals(last_run))
        {
            try {  //APIs can fail (ie Internet or Service down)

                //RapidAPI header
                HttpRequest request = HttpRequest.newBuilder()
		            .uri(URI.create("https://nfl-team-stats.p.rapidapi.com/v1/nfl-stats/teams/receiving-stats/offense/2019"))
		            .header("X-RapidAPI-Key", "ec6e646230mshf820e393587eb36p16c0b2jsn78339512865b")
		            .header("X-RapidAPI-Host", "nfl-team-stats.p.rapidapi.com")
		            .method("GET", HttpRequest.BodyPublishers.noBody())
		            .build();

                //RapidAPI request and response
                HttpResponse<String> response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());

                //JSONParser extracts text body and parses to JSONObject
                this.body = (JSONObject) new JSONParser().parse(response.body());
                this.status = HttpStatus.OK;  //200 success
                this.last_run = today;
            }
            catch (Exception e) {  //capture failure info
                HashMap<String, String> status = new HashMap<>();
                status.put("status", "RapidApi failure: " + e);

                //Setup object for error
                this.body = (JSONObject) status;
                this.status = HttpStatus.INTERNAL_SERVER_ERROR; //500 error
                this.last_run = null;
            }
        }

        //return JSONObject in RESTful style
        return new ResponseEntity<>(body, status);
    }
}
{"_embedded":{"teamReceivingStatsList":[{"name":"Falcons","receives":459,"touchdowns":29,"yards":5049,"_links":{"receiving-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/passing-stats/offense/2019"}}},{"name":"Saints","receives":418,"touchdowns":36,"yards":4431,"_links":{"receiving-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/passing-stats/offense/2019"}}},{"name":"Rams","receives":397,"touchdowns":22,"yards":4669,"_links":{"receiving-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/passing-stats/offense/2019"}}},{"name":"Chargers","receives":394,"touchdowns":24,"yards":4648,"_links":{"receiving-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/passing-stats/offense/2019"}}},{"name":"Eagles","receives":391,"touchdowns":27,"yards":4063,"_links":{"receiving-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/passing-stats/offense/2019"}}},{"name":"Cowboys","receives":388,"touchdowns":30,"yards":4902,"_links":{"receiving-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/passing-stats/offense/2019"}}},{"name":"Panthers","receives":382,"touchdowns":17,"yards":4134,"_links":{"receiving-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/passing-stats/offense/2019"}}},{"name":"Buccaneers","receives":382,"touchdowns":33,"yards":5127,"_links":{"receiving-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/passing-stats/offense/2019"}}},{"name":"Chiefs","receives":378,"touchdowns":30,"yards":4690,"_links":{"receiving-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/passing-stats/offense/2019"}}},{"name":"Patriots","receives":378,"touchdowns":25,"yards":4153,"_links":{"receiving-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/passing-stats/offense/2019"}}},{"name":"Giants","receives":376,"touchdowns":30,"yards":4070,"_links":{"receiving-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/passing-stats/offense/2019"}}},{"name":"Bears","receives":371,"touchdowns":20,"yards":3573,"_links":{"receiving-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/passing-stats/offense/2019"}}},{"name":"Dolphins","receives":371,"touchdowns":22,"yards":4117,"_links":{"receiving-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/passing-stats/offense/2019"}}},{"name":"Raiders","receives":367,"touchdowns":22,"yards":4110,"_links":{"receiving-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/passing-stats/offense/2019"}}},{"name":"Jaguars","receives":364,"touchdowns":24,"yards":4023,"_links":{"receiving-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/passing-stats/offense/2019"}}},{"name":"Bengals","receives":356,"touchdowns":18,"yards":3994,"_links":{"receiving-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/passing-stats/offense/2019"}}},{"name":"Packers","receives":356,"touchdowns":26,"yards":4017,"_links":{"receiving-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/passing-stats/offense/2019"}}},{"name":"Texans","receives":355,"touchdowns":27,"yards":4083,"_links":{"receiving-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/passing-stats/offense/2019"}}},{"name":"Cardinals","receives":355,"touchdowns":20,"yards":3797,"_links":{"receiving-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/passing-stats/offense/2019"}}},{"name":"Lions","receives":344,"touchdowns":28,"yards":4187,"_links":{"receiving-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/passing-stats/offense/2019"}}},{"name":"Seahawks","receives":341,"touchdowns":31,"yards":4110,"_links":{"receiving-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/passing-stats/offense/2019"}}},{"name":"49ers","receives":331,"touchdowns":28,"yards":4029,"_links":{"receiving-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/passing-stats/offense/2019"}}},{"name":"Jets","receives":323,"touchdowns":19,"yards":3443,"_links":{"receiving-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/passing-stats/offense/2019"}}},{"name":"Vikings","receives":319,"touchdowns":26,"yards":3729,"_links":{"receiving-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/passing-stats/offense/2019"}}},{"name":"Browns","receives":318,"touchdowns":22,"yards":3847,"_links":{"receiving-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/passing-stats/offense/2019"}}},{"name":"Steelers","receives":315,"touchdowns":18,"yards":3214,"_links":{"receiving-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/passing-stats/offense/2019"}}},{"name":"Broncos","receives":312,"touchdowns":16,"yards":3401,"_links":{"receiving-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/passing-stats/offense/2019"}}},{"name":"Colts","receives":307,"touchdowns":22,"yards":3314,"_links":{"receiving-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/passing-stats/offense/2019"}}},{"name":"Bills","receives":299,"touchdowns":21,"yards":3476,"_links":{"receiving-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/passing-stats/offense/2019"}}},{"name":"Redskins","receives":298,"touchdowns":18,"yards":3205,"_links":{"receiving-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/passing-stats/offense/2019"}}},{"name":"Titans","receives":297,"touchdowns":29,"yards":3956,"_links":{"receiving-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/passing-stats/offense/2019"}}},{"name":"Ravens","receives":289,"touchdowns":37,"yards":3350,"_links":{"receiving-stats":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/passing-stats/offense/2019"}}}]},"_links":{"self":{"href":"http://nflteamstatsapi-env.eba-ri96jifs.us-east-1.elasticbeanstalk.com/v1/nfl-stats/teams/receiving-stats/offense/2019"}}}
|   import org.json.simple.JSONObject;
package org.json.simple does not exist