카테고리 없음

스파르타코딩 웹개발 2주차 서버-클라이언트 통신

Hanachoi 2022. 4. 19. 02:09

#서버->클라이언트: JSON이해하기

  • 자바스크립트로 페이지 전환없이 서버에서 값을 받아 올 수 있는 방법
  • 서버에서 클라이언트한테 '여기로 요청해~'라고 열어놓은 창구 API에 대해 이해필요
  • API자체는 보기 어렵기 때문에 Jsonview를 설치하면 좀 더 깔끔하게 볼 수 있음 
  • Json형식은 딕셔너리 + 리스트 조합과 똑같음 
  • 리스트안에 딕셔너리 여러개 들어 있는건 자바스크립트에서 연습한 for문의 전형적인 패턴

 

#클라이언트->서버 : GET요청 이해하기

  • API는 은행창구와 같음. 같은 예금 창구에서도 개인고객이나 기업고객이냐에 따라 가져와야하는 것/ 처리해주는 것이 다른 것처럼, 클라이언트가 요청할 떄도 '타입'이라는게 존재 
  • GET -> 데이터조회(read) 요청 할 때
  • POST -> 데이터 생성(creat), 변경(update), 삭제(delete) 요청 할 때
  • 브라우저에서 엔터를 지는 행위 자체가 GET요청
  • 우리가 웹에서 쓰는 주소를 보면, 서버주소, 그리고 프론트와 백엔드가 정한 정보를 주는 코드로 구성되어 있음 

 

 

# Ajax 시작하기 

  • 주의! Ajax는 jQuery를 임포트한 페이지에서만 동작가능하다
  • 기본 틀은 외우지않고 복사해서 사용하면 됨 
  • url 부분에 필요한 ajax주소를 넣어주면 로드 됨
$.ajax({
type: "GET", // GET 방식으로 요청한다.
url: "http://openapi.seoul.go.kr:8088/6d4d776b466c656533356a4b4b5872/json/RealtimeCityAir/1/99",
data: {}, // 요청하면서 함께 줄 데이터 (GET 요청시엔 비워두세요)
success: function(response){ // 서버에서 준 결과를 response라는 변수에 담음
console.log(response) // 서버에서 준 결과를 이용해서 나머지 코드를 작성
}
})
  • 성공하면 response 값에 서버의 결과 값을 담아서 함수를 실행함 
  • 이렇게 값을 불러오면 내가 필요한 함수를 만들어서 데이터를 불러 올 수 있게 된다 
  • 아래처럼 반복문을 이용해서 원하는 데이터 값을 뽑아 낼 수 있음 

 

# Ajax 연습하기

  • for 문을 사용해서 [업데이트]버튼을 누르면 데이터가 쫙 업데이트 되도록 만들기
  • 업데이트 버튼을 누를 때 마다 API를 받아와서 업데이트 해주도록 만들기

 

 <script>
        function q1() {
            $.ajax({
                type: "GET",
                url: "http://openapi.seoul.go.kr:8088/6d4d776b466c656533356a4b4b5872/json/RealtimeCityAir/1/99",
                data: {},
                success: function (response) {
                    let rows = response['RealtimeCityAir']['row']
                    for (let i = 0; i < rows.length; i++){
                        let gu_name = rows[i]['MSRSTE_NM']
                        let gu_mise = rows[i]['IDEX_MVL']
                        console.log(gu_name,gu_mise)
                    }

                }
            })
        }
    </script>

 

  • 여기서 리스트 형식으로 업데이트 버튼을 누를 때 마다 새롭게 붙게 해주려면
  • 아래처럼 temp_html형식으로 동적버튼을 만들어주면 됨 
  function q1() {
            $.ajax({
                type: "GET",
                url: "http://openapi.seoul.go.kr:8088/6d4d776b466c656533356a4b4b5872/json/RealtimeCityAir/1/99",
                data: {},
                success: function (response) {
                    let rows = response['RealtimeCityAir']['row']
                    for (let i = 0; i < rows.length; i++){
                        let gu_name = rows[i]['MSRSTE_NM']
                        let gu_mise = rows[i]['IDEX_MVL']

                        let temp_html = `<li>${gu_name} : ${gu_mise}</li>`
                        $('#names-q1').append(temp_html)
                    }
                }
            })
        }
  • 하지만 여기서 계속 똑같은 리스트가 연달아 붙는 상황이 생기기 때문에 누를 때 마다 원래 있던 리스트를 지우고 새로운 리스트를 업데이트 하도록 만드는게 더 좋음 
$('#names-q1').empty() //ajax 시작하기 전에 넣어서 원래 있던 리스트를 비워주기

 

 

#미세먼지 수치가 70이상인 곳은 빨갛게 만들어 보기

  • css를 이용해서 선택적으로 빨간색 폰트를 입히면 되겠지
  • <style></style>에 bad라는 걸 만들어 줘서 빨간색 폰트를 입히는데 IF문을 써서 미세먼지 70 이상이면 빨간색으로 변하도록 스타일을 입히면 됨 
function q1() {
            $('#names-q1').empty()
            $.ajax({
                type: "GET",
                url: "http://openapi.seoul.go.kr:8088/6d4d776b466c656533356a4b4b5872/json/RealtimeCityAir/1/99",
                data: {},
                success: function (response) {
                    let rows = response['RealtimeCityAir']['row']
                    for (let i = 0; i < rows.length; i++){
                        let gu_name = rows[i]['MSRSTE_NM']
                        let gu_mise = rows[i]['IDEX_MVL']

                        let temp_html=``
                        if(gu_mise>70){
                            temp_html = `<li class="bad">${gu_name} : ${gu_mise}</li>`
                        }else{
                            temp_html = `<li>${gu_name} : ${gu_mise}</li>`
                        }
                        $('#names-q1').append(temp_html)
                    }
                }
            })
        }

 

 

#따릉이 open API 

  • 미세먼지 API 에서 했던것과 똑같은 구조
function q1() {
            $.ajax({
                type: "GET",
                url: "http://spartacodingclub.shop/sparta_api/seoulbike",
                data: {},
                success: function (response) {
                    let rows = response['getStationList']['row']
                    for (let i = 0; i < rows.length; i++) {
                        let name = rows[i]['stationName']
                        let rack = rows[i]['rackTotCnt']
                        let bike = rows[i]['parkingBikeTotCnt']

                        let temp_html = `  <tr>
                                            <td>${name}</td>
                                            <td>${rack}</td>
                                            <td>${bike}</td>
                                            </tr>`
                    }
                }
            })
        }
  • temp_html을 붙여야 하는 곳은 어디일까 <tr></tr> 감싸고 있는 <tbody id = "names-q1">에 붙여줘야 함
  $('#names-q1').append(temp_html)
  // let temp_html밑에 적어주자