본문 바로가기
개발/Java

[JAVA] REST API 구현하기(API KEY) - Postman 이용

by 코딩하는 흰둥이 2023. 9. 7.
반응형

https://greed-yb.tistory.com/235

 

[Java] google json-simple 사용하기

dependency // gradle implementation group: 'com.googlecode.json-simple', name: 'json-simple', version: '1.1.1' implementation group: 'com.google.code.gson', name: 'gson', version: '2.8.5' // maven com.googlecode.json-simple json-simple 1.1.1 com.google.cod

greed-yb.tistory.com

해당 글의 GSON 이용

 

  • Spring Boot
  • Mybatis
  • Gradle
  • IntelliJ Ultimate

 

Controller
@RestController
public class RestApiController {

    @Autowired
    private RestApiService service;

    @GetMapping("/api/device")
    public String apiDevice(HttpServletRequest request , HttpServletResponse response) throws Exception {
        // PasswordEncoder 로 변환시킨 key 값 - api 인증 key 로 사용
        String apiKey = "$2a$10$lFfvF1DBf/1XFcCYt7n1m.dTQlKY4sDNeoIwzRbV.bhCyN51.qK";
        
        // header에 들어올 api key 값
        String key = request.getHeader("x-api-key");

        // 사용자가 header 에 넣은 값과 api 값이 같다면
        if (apiKey.equals(key)) {
            List<DeviceVo> deviceVo = service.deviceList();
            List<ZoneVo> zoneVo = service.zoneList();

//        Gson gson = new Gson();
            // json 보기 편하게 정렬
            Gson gson = new GsonBuilder().setPrettyPrinting().create();
            String deviceJson = gson.toJson(deviceVo);
            String zoneJson = gson.toJson(zoneVo);

            JsonParser jp = new JsonParser();
            JsonElement deviceJe = jp.parse(deviceJson);
            JsonElement zoneJe = jp.parse(zoneJson);

            // device와 zone을 같이 보내기 위한 object
            JsonObject obj = new JsonObject();
            obj.add("device", deviceJe);
            obj.add("zone", zoneJe);


            //한 종류의 데이터만 보내려면 object에 넣지 않고 gson.toJson() 에 넣어도 가능
            String prettyJsonString = gson.toJson(obj);
            System.err.println(prettyJsonString);

            return prettyJsonString;
        }else {
            // apikey가 맞지 않다면 400에러와 함께 오류 문구 return
            response.setStatus(400);
            return "API KEY ERROR";
        }
    }

}

 

Console 결과

 

{
  "device": [
    {
      "deviceId": 1,
      "deviceName": "장치이름",
		....
		....
		....
		....
    }
  ],
  "zone": [
    {
      "testId": 1,
      "testName": "시설",
		....
		....
		....
		....
    }
  ]
}

console에 찍히는 결과값

 

 

Postman 으로 테스트

header 에 x-api-key 를 key로 넣고

Value 에 Controller 에서 지정한 값을 넣어서 전송하면

아래 하단 처럼 status 200과 json 값이 출력된다

 

 

 

 

 

잘못된 키와 값을 넣는 경우 설정한 문구 출력 및 400 에

 

 

API KEY 와 Postman을 사용하지 않고 테스트

Controller 단에서 apikey와 header 의 값을 비교하는 구문을 빼버리고

url에 localhost:8080/api/device 로 들어가면

화면에 json 데이터가 출력된다

 

 


특정 값만 조회하는 형식이 아니라

전체 데이터를 다 가져오게 코드를 구성하였으니

특정 값이 필요할 경우 조회 값만 받아서 쿼리를 변경하면 된다

댓글