+5

Interactive with Google API and some misstake

I. Google API

  • API là viết tắt của từ Application programming interface - Giao diện lập trình ứng dụng. Mỗi hệ điều hành, ứng dụng đều có những bộ API khác nhau. Nó cung cấp cho người lập trình các hàm tương tác với CSDL, lập trình thực hiện các thao tác với hệ điều hành hay phần mềm đó.
  • Google cung cấp các hàm API cho phép lập trình viên tương tác với nó, ví dụ: cho phép đăng nhập vào 1 ứng dụng sử dụng tài khoản google, tạo event từ phía client và đẩy lên google calendar, tương tác với google map...

II. Điều kiện tiên quyết

  • Trước khi bạn có thể làm gì đó với google api, thì bạn phải đảm bảo điều kiện nó đưa ra trước đã, thì ở đây: Oauth 2.0 protocols sẽ giúp bạn.
  • Trong ruby có 2 cách để bạn có thể authorization google api, đó là sử dụng javascipt hoặc dùng gem google-client-api của ruby.

III. Authorization bằng javascipt

IV. Authorization bằng gem "google-api-client"

  • Thư viện này dùng cả Signet và Google Auth Library for Ruby để thực hiện việc authorization.
  • Để authorization trước tiên bạn cần tạo 1 project trên https://console.developers.google.com/apis/library
  • Đoạn code mẫu cho việc authorization như sau:**
keypath = Rails.root.join("config", "client.p12").to_s
key = Google::APIClient::PKCS12.load_key(keypath, "notasecret")

@client = Google::APIClient.new({application_name: I18n.t("events.framgia_crb_system"),
  application_version: "1.0"})
@client.authorization = Signet::OAuth2::Client.new(
  token_credential_uri: "https://accounts.google.com/o/oauth2/token",
  audience: "https://accounts.google.com/o/oauth2/token",
  scope: "https://www.googleapis.com/auth/calendar",
  issuer: "framgia-crb-system@framgia-crb-system.iam.gserviceaccount.com",
  signing_key: key)
@client.authorization.fetch_access_token!
  • Những lỗi mà mọi người sẽ thường gặp phải:
  • Đầu tiên sẽ là "invalid keyfile or passphrase", đây là lỗi do thằng Signet nó không đọc được key của bạn.
    • Giải pháp: Bạn cần tạo 1 service account trên project mà bạn đã tạo trên google api và làm theo các bước sau:
      1. Vào project API muốn tạo
      2. Vào credentialls chọn create credentials
      3. Chọn service account key => chọn new service account
      4. Chọn key_type là k12 => google sẽ tự động tải xuống file p12 => chuyển file đó vào folder "config" trong project
    • Chỗ issuer cũng chính là service account id.
  • Lỗi thứ 2 là lỗi "invalidgrant", đây là lỗi do bạn chưa cấp quyền cho request từ phía client, bạn vào service account, chọn edit, tích vào Enable G suite Domain-wide Delegation, sau đó save lại.
  • Sau khi authorization được rồi google sẽ trả về cho bạn 1 access_token.

V. Tổng Kết

  • Trên đây là những kinh nghiệm mà mình đã có được trong quá trình làm việc với google api mà mình muốn chia sẻ, hi vọng phần nào sẽ giúp được cho các bạn. 😄

All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí