Parse JSON API trong ruby
Bài đăng này đã không được cập nhật trong 6 năm
Trang The Ruby Toolbox có liệt kê ra không dưới 25 HTTP clients. Trong bài viết này, mình xin giới thiệu 4 thư viện phổ biến nhất. Hãy xem cách các thư viện này lấy và dịch kết quả JSON từ một API RESTful như thế nào.
Với mỗi thư viện, sẽ có một ví dụ tương ứng, và 4 đoạn code ví dụ đó sẽ:
- Định nghĩa một URL được sử dụng để phân tích. Ta sẽ dùng Spotify API vì nó cho phép request ẩn danh, không cần xác thực. Bạn có thể tìm hiểu thêm ở đây.
- Tạo một request HTTP GET đến URL đã được định nghĩa ở trên.
- Dịch kết quả JSON nhận được.
Mỗi đoạn code sẽ là một đường dẫn khác nhau đến cùng một địa chỉ đích. Nếu bạn dùng lệnh pp
để in kết quả ra thì sẽ được một hash với kết quả tìm kiếm Spotify.
net/http
net/http
đã được tích hợp sẵn vào trong thư viện chuẩn của Ruby, bạn không cần phải cài thêm bất cứ gem nào cả. Nếu dự án của bạn cần có một tốc độ phát triển nhanh thì đây là một lựa chọn tốt. Ví dụ như twilio-ruby gem cũng được xây dựng trên net/http
.
Vì là một thư viện đã được tích hợp sẵn, nên cũng không ngạc nhiên khi mà sử dụng net/http
sẽ yêu cầu bạn phải làm nhiều việc hơn là các gem cài thêm. Ví dụ như bạn phải tao một đối tượng URI trước khi tạo request HTTP. Hãy cùng xem code sau:
require 'net/http'
require 'json'
uri = URI('https://api.spotify.com/v1/search?type=artist&q=tycho')
response = Net::HTTP.get(uri)
JSON.parse(response)
HTTParty
Được xây dựng trên net/http
, như lời giới thiệu trên repo github
Makes http fun again!
Nó bổ sung rất nhiều phương thức tiện lợi và có thể được sử dụng cho tất cả các cách xử lý các yêu cầu HTTP. Câu lệnh cài đặt rất đơn giản:
gem install httparty
require 'httparty'
response = HTTParty.get('https://api.spotify.com/v1/search?type=artist&q=tycho')
response.parsed_response
Công việc phải làm đã đơn giản đi nhiều rồi chứ nhỉ? HTTParty cũng cung cấp một giao diện dòng lệnh hữu ích trong quá trình phát triển khi cố gắng hiểu cấu trúc của các phản hồi HTTP.
rest-client
Cũng được xây dựng trên net/http
.
A simple HTTP and REST client for Ruby, inspired by the Sinatra's microframework style of specifying actions: get, put, post, delete.
Cài đặt
gem install rest-client
Tuy nhiên, không giống với khi sử dụng HTTParty, ở đây bạn vẫn cần thư viện JSON
để dịch kết quả. Code như sau:
require 'rest-client'
require 'json'
response = RestClient.get('https://api.spotify.com/v1/search?type=artist&q=tycho')
JSON.parse(response)
Faraday
Cài đặt
gem install faraday
gem install faraday_middleware
Trước khi thực hiện yêu cầu HTTP và phân tích kết quả, ta cần phải:
- Chọn HTTP adapter, mặc định là
net/http
- Xác định loại response, trong trường hợp này ta sử dụng JSON
Code
require 'faraday'
require 'faraday_middleware'
url = 'https://api.spotify.com/v1'
conn = Faraday.new(url: url) do |faraday|
faraday.adapter Faraday.default_adapter
faraday.response :json
end
response = conn.get('search', type: 'artist', q: 'tycho')
response.body
Tham khảo
https://www.twilio.com/blog/2015/10/4-ways-to-parse-a-json-api-with-ruby.html
All rights reserved