데이터베이스 시드에 Rest 클라이언트 사용

4330 단어
요구 사항 목록이 가장 짧았기 때문에 Flatiron School의 최종 프로젝트에는 하늘이 한계였습니다. 거의 너무 개방적이었지만 미술사 부전공과 Met Museum에 대한 사랑에 경의를 표하기로 결정했습니다. 지금은 은퇴한(😢) 귀하의 방문을 표시하는 주석 단추(제 단추 아이콘에도 경의를 표했습니다) 외에도 Met 여행의 가장 좋은 점은 미로를 헤매면서 무엇을 보게 될지 결코 알 수 없다는 것입니다. 홀과 갤러리의. 미지의 흥분을 약간 재현하기 위해 새로고침할 때마다 변경되는 무작위로 선택된 5개의 예술 작품 샘플을 사용자에게 제공하기로 결정했습니다.

Met는 470,000개 이상의 고유한 개체를 포함하여 정말 강력한 컬렉션API을 보유하고 있습니다!

많은 데이터에 대해 이야기하십시오! 최소한 이 데이터의 샘플링을 내 백엔드 API로 가져오는 방법을 알아내야 했습니다. RestClient에서 내가 찾던 것을 찾았습니다. 이론적으로 그것은 사용하기 매우 쉽고 아래에서 몇 가지 빠른 단계를 제공할 것입니다. 데이터를 가져오는 API를 얼마나 잘 설정했는지에 따라 달라진다고 생각하기 때문에 이론적으로 말합니다. 궁금한 점이 있다면 Met's는 때때로 정말 쉬웠고 다른 것들은 정말 어려웠습니다. 일부 예술품에는 제가 가져오고 싶었던 속성이 없었기 때문에 일부 부서에서 시드 파일을 손에 들고 있었습니다. 간결함을 위해 저는 끌어오기 쉬운 데이터 중 하나인 Met의 부서 목록을 사용하겠습니다. (예술품 자체에 씨앗을 뿌리는 것은 또 다른 이야기였습니다!)

1 단계:



시작하려면 Rest Client Gem을 gem 파일에 추가하고 application.rb 파일에 필요합니다. 그런 다음 터미널에 번들로 설치하십시오.

보석 파일: gem ‘rest-client’application.rb: require "rest-client"터미널: $ bundle install

2 단계:



MVC 파일 구조를 설정하려면 선택한 API에서 오는 데이터의 모양을 가지고 놀고 싶을 것입니다. Met는 몇 가지 예를 제공했기 때문에 각 부서와 작품에 대해 저장하고 싶은 정보를 선택한 다음 그에 따라 모델과 데이터베이스 마이그레이션을 설정할 수 있었습니다.
모델이 생성되면 터미널 창에서 다음을 실행하여 데이터베이스를 만들고 설정합니다.rails db:createrails db:migrate

3단계:



다음은 seed 파일입니다. seed 파일을 실행할 때 호출될 데이터를 수집하기 위한 메소드를 만들고 싶을 것입니다. 요점은 다음과 같습니다. 나머지 클라이언트의 데이터를 변수에 저장하고 데이터를 구문 분석하여 JSON으로 저장하고 클래스의 새 인스턴스를 인스턴스화하려는 데이터를 사용합니다.
다음은 Met의 부서 쿼리가 반환하는 것입니다.
제 부서 모델은 간단하게

API 데이터베이스를 변수에 쿼리하기 위해 RestClient를 사용하여 데이터를 저장합니다.

department_data = RestClient.get('https://collectionapi.metmuseum.org/public/collection/v1/departments')


쿼리가 200 성공 코드를 반환하면 구문 분석된 데이터를 다른 변수에 저장합니다.

parsed_department_data = JSON.parse(department_data)


JSON에서 원하는 데이터를 가져와 변수에 저장합니다. 제 경우에는 배열을 만드는 부서 개체를 가져오고 있습니다.

department_array = parsed_department_data['departments']


배열을 반복하여 배열의 각 항목으로 클래스의 새 인스턴스를 만듭니다.

department_array.each { |dept|
    department = Department.create(
        name: dept['displayName']
    )
}


4단계:



파일 끝에 메소드 이름을 작성하여 메소드를 호출하고 터미널에서 파일을 실행하여 데이터베이스를 시드하십시오.
다음은 전체 메서드와 seed.rb 호출입니다.

def get_department_data

    department_data = RestClient.get('https://collectionapi.metmuseum.org/public/collection/v1/departments')
    if department_data.code == 200
        parsed_department_data = JSON.parse(department_data)
        department_array = parsed_department_data['departments']
        department_array.each { |dept|
            department = Department.create(
                name: dept['displayName']
            )
        }
    end

end

get_department_data


터미널 호출:rails db:seed

5단계:



모든 데이터가 데이터베이스에 저장되면 로컬 호스트의 브라우저에서 볼 수 있으며 프런트 엔드 API의 가져오기 요청을 통해 액세스할 수 있습니다.

컨트롤러에서 JSON을 렌더링하는 인덱스 경로를 만듭니다.

def index
        departments = Department.all
        render({json: departments, except: [:created_at, :updated_at] })
end


브라우저 창에서 경로를 여는 것은 다음과 같습니다.http://localhost:3000/departments

보다 복잡한 사용 사례를 위해 각 부서와 관련된 아트웍 개체 시드에 대해 다음에 작성하겠습니다. 계속 지켜봐 주십시오 :) 그리고 Rest Client 사용에 대한 제안 사항이 있으면 알려주세요.
내 시드 파일은 여기에서 찾을 수 있습니다: ArtStart - Back-end

좋은 웹페이지 즐겨찾기