Ruby의 49일: 36일차 - API: HTTP 호출 구축

13955 단어 ruby
루비의 49일 중 36일차에 오신 것을 환영합니다! 🎉

어제 다룬 웹 스크래핑은 프로그래밍 방식으로 웹사이트에서 정보를 빼내는 좋은 방법입니다. 그러나 더 나은 방법이 있지만 웹 사이트가 구축하는 경우에만 가능합니다. 우리는 API에 대해 이야기하고 있습니다.

오늘 우리는 Ruby에서 실제 API에 대한 샘플 호출을 빌드할 것입니다.

먼저 API란 무엇인가?

API는 애플리케이션 프로그래밍 인터페이스(Application Programming Interface)의 약자로, 애플리케이션과 상호작용하기 위해 프로그래밍된 일련의 방법입니다.

가장 자주 사용하게 될 API는 원격 웹 서버에 대한 인터페이스로, 웹 사이트에서 데이터를 가져오는 대신 사용할 수 있습니다. 그들은 종종 요청 구성에서 훨씬 더 많은 사용자 정의 가능성을 제공합니다. API를 사용하면 액세스 제한에 따라 정보를 생성, 읽기, 업데이트 및 삭제(파기)할 수 있습니다.

예를 들어 DEV에 계정이 있고 API를 사용하여 새 블로그 게시물을 만들고, 블로그 게시물을 읽고(즉, 가져오기), 기존 게시물을 업데이트하거나 이미 게시한 게시물을 삭제할(즉, 파기) 수 있습니다. 이 네 가지 작업을 종종 CRUD 작업이라고 합니다.

Ruby에서 API 작업



오늘은 DEV API 에서 읽기 위한 작은 요청을 빌드하려고 합니다.

이 요청에서 DEV의 사용자 이름(ben)으로 Ben Halpern의 모든 기사를 가져올 것입니다.


.ltag__user__id__1 .follow-action-button {
배경색: #3b21e2 !중요;
색상: #c9faf2 !중요;
border-color: #3b21e2 !중요;
}



벤 할펀 팔로우



A Canadian software developer who thinks he’s funny. He/Him.





require 'net/http'

url = URI("https://dev.to/api/articles?username=ben")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)

response = https.request(request)

response = JSON.parse(response.body) 


위의 요청은 웹 스크래핑 데이터 프로세스를 시작하는 방법과 매우 유사합니다. 웹 스크래핑과 API 호출 모두 HTTP 요청을 작성해야 합니다. 차이점은 이후에 무엇을 하느냐입니다.

웹 스크래핑은 데이터를 원시 HTML로 돌려줍니다. API에 요청하면 일반적으로 참조할 수 있는 키 및 값과 함께 보다 조직화된 형식으로 데이터를 반환합니다.

그렇기 때문에 위 코드 샘플의 마지막 줄에서 데이터를 JSON 로 구문 분석합니다. JSON는 정보를 저장하는 방법입니다. JavaScript Object Notation의 약자이지만 사람들은 거의 그렇게 부르지 않습니다.

해당 JSON.parse 메서드 호출의 결과는 다음과 같습니다. DEV API Reference Documentation의 샘플 데이터입니다.

{
  "type_of": "article",
  "id": 194541,
  "title": "There's a new DEV theme in town for all you 10x hackers out there (plus one actually useful new feature)",
  "description": "",
  "cover_image": 
  "https://res.cloudinary.com/practicaldev/image/fetch/s--74Bl23tz--/c_imagga_scale,f_auto,fl_progressive,h_420,q_auto,w_1000/https://res.cloudinary.com/practicaldev/image/fetch/s--xU8cbIK4--/c_imagga_scale%2Cf_auto%2Cfl_progressive%2Ch_420%2Cq_auto%2Cw_1000/https://thepracticaldev.s3.amazonaws.com/i/8a39dzf3oovzc2snl7iv.png",
  "readable_publish_date": "Oct 24",
  "social_image": 
  "https://res.cloudinary.com/practicaldev/image/fetch/s--SeMxdKIa--/c_imagga_scale,f_auto,fl_progressive,h_500,q_auto,w_1000/https://res.cloudinary.com/practicaldev/image/fetch/s--xU8cbIK4--/c_imagga_scale%2Cf_auto%2Cfl_progressive%2Ch_420%2Cq_auto%2Cw_1000/https://thepracticaldev.s3.amazonaws.com/i/8a39dzf3oovzc2snl7iv.png",
  "tag_list": [
    "meta",
    "changelog",
    "css",
    "ux"
  ],
  "tags": "meta, changelog, css, ux",
  "slug": "there-s-a-new-dev-theme-in-town-for-all-you-10x-hackers-out-there-plus-one-actually-useful-new-feature-2kgk",
  "path": "/devteam/there-s-a-new-dev-theme-in-town-for-all-you-10x-hackers-out-there-plus-one-actually-useful-new-feature-2kgk",
  "url": "https://dev.to/devteam/there-s-a-new-dev-theme-in-town-for-all-you-10x-hackers-out-there-plus-one-actually-useful-new-feature-2kgk",
  "canonical_url": "https://dev.to/devteam/there-s-a-new-dev-theme-in-town-for-all-you-10x-hackers-out-there-plus-one-actually-useful-new-feature-2kgk",
  "comments_count": 37,
  "positive_reactions_count": 12,
  "public_reactions_count": 142,
  "collection_id": null,
  "created_at": "2019-10-24T13:41:29Z",
  "edited_at": "2019-10-24T13:56:35Z",
  "crossposted_at": null,
  "published_at": "2019-10-24T13:52:17Z",
  "last_comment_at": "2019-10-25T08:12:43Z",
  "published_timestamp": "2019-10-24T13:52:17Z",
  "reading_time_minutes": 15,
  "user": {
  "name": "Ben Halpern",
  "username": "ben",
  "twitter_username": "bendhalpern",
  "github_username": "benhalpern",
  "website_url": "http://benhalpern.com",
  "profile_image": "https://res.cloudinary.com/practicaldev/image/fetch/s--Y1sq1tFG--/c_fill,f_auto,fl_progressive,h_640,q_auto,w_640/https://thepracticaldev.s3.amazonaws.com/uploads/user/profile_image/1/f451a206-11c8-4e3d-8936-143d0a7e65bb.png",
  "profile_image_90": "https://res.cloudinary.com/practicaldev/image/fetch/s--DcW51A6v--/c_fill,f_auto,fl_progressive,h_90,q_auto,w_90/https://thepracticaldev.s3.amazonaws.com/uploads/user/profile_image/1/f451a206-11c8-4e3d-8936-143d0a7e65bb.png"
},
  "organization": {
    "name": "The DEV Team",
    "username": "devteam",
    "slug": "devteam",
    "profile_image": "https://res.cloudinary.com/practicaldev/image/fetch/s--0kDBq1Ne--/c_fill,f_auto,fl_progressive,h_640,q_auto,w_640/https://thepracticaldev.s3.amazonaws.com/uploads/organization/profile_image/1/0213bbaa-d5a1-4d25-9e7a-10c30b455af0.png",
    "profile_image_90": "https://res.cloudinary.com/practicaldev/image/fetch/s--8tTU-XkZ--/c_fill,f_auto,fl_progressive,h_90,q_auto,w_90/https://thepracticaldev.s3.amazonaws.com/uploads/organization/profile_image/1/0213bbaa-d5a1-4d25-9e7a-10c30b455af0.png"
    }
  }
]


그것은 많은 데이터입니다!

우리는 그것과 어떻게 상호 작용할 것입니까! 해시인 것처럼 포인트를 참조할 수 있습니다.

> puts response["id"]

# => 194541


집에서 자신의 터미널로 시도하면 반환된 데이터의 다른 부분에 액세스하여 실험할 수 있습니다. 축하합니다. Ruby에서 첫 번째 API 호출을 만들었습니다!

49 Days of Ruby의 다음 회차를 위해 내일 다시 오세요! 해시태그를 사용하여 트위터에서 대화에 참여할 수 있습니다.

좋은 웹페이지 즐겨찾기