Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Yii
Code

Xây dựng Startup của bạn: Nhập với API Google Contacts

by
Difficulty:IntermediateLength:LongLanguages:
This post is part of a series called Building Your Startup With PHP.
Building Your Startup: Completing Group Scheduling
Building Your Startup: Error Logging

Vietnamese (Tiếng Việt) translation by Thai An (you can also view the original English article)

Final product image
What You'll Be Creating

Hướng dẫn này nằm trong loạt bài Building Your Startup With PHP trên Envato Tuts+. Trong loạt bài này, tôi hướng dẫn bạn thông qua việc khởi chạy một startup từ ý tưởng đến tế thực tế bằng cách sử dụng ứng dụng Meeting Planner của tôi làm ví dụ thực tiễn. Mỗi bước theo bài viết, tôi sẽ phát hành code của Meeting Planner dưới dạng ví dụ mã nguồn mở để bạn có thể học hỏi. Tôi cũng sẽ giải quyết các vấn đề kinh doanh phát sinh có liên quan đến startup.

Giới thiệu

Chào buổi sáng. Hôm nay, tôi sẽ hướng dẫn bạn cách sử dụng Google API để nhập địa chỉ liên hệ của mọi người vào Meeting Planner. Mục tiêu là giúp mọi người mời bạn bè tham gia cuộc họp nhanh hơn.

Nếu bạn chưa từng lên lịch cho cuộc họp với Meeting Planner, vui lòng thử xem. Nếu bạn sử dụng tài khoản Google để đăng ký, bạn có thể truy cập trang Friend ở trên và Nhập contacts Google của bạn. Chia sẻ suy nghĩ và phản hồi của bạn trong phần bình luận bên dưới.

Tôi luôn tham gia vào các cuộc thảo luận, nhưng bạn cũng có thể tiếp cận tôi @reifman trên Twitter (gần đây tài khoản của tôi đã được xác minh vì vậy tôi phải lạnh lùng như Justin Beebert (lưu ý đến các vị thần biên tập — Tôi tự tin vào cách viết này. Tôi nghĩ đều này đúng. Cho qua đi.) Tôi luôn cởi mở ra các ý tưởng về tính năng mới cho Meeting Planner cũng như các đề xuất cho bài viết trong tương lai.

Xin nhắc lại, tất cả code của Meeting Planner được cung cấp dưới dạng mã nguồn mở và được viết bằng framework Yii2 cho PHP. Nếu bạn muốn tìm hiểu thêm về Yii2, hãy xem loạt bài song song của tôi Programming With Yii2.

Nghĩ về việc tích hợp Google Contacts

Trang Friends

Nhiều người có hàng nghìn địa chỉ liên hệ trong tài khoản Google của họ — và rất ít người quan trọng đối với họ. Nhưng với đa số, không có cách nào để phân biệt cái nào quan trong và cái nào không.

Tôi tin rằng kích thước của bảng User trong Meeting Planner sẽ tác động đến hiệu suất tổng thể của dịch vụ. Tôi không muốn nhập các liên hệ mà có thể không bao giờ liên quan đến bảng User.

Việc này tạo ra một số phiền toái với UX và cả code ở nơi mọi người tìm kiếm và truy cập bạn bè của họ trong dịch vụ.

Tôi quyết định cuối cùng để tạo ra một bảng riêng biệt cho các liên hệ và thực sự hiển thị điều này một cách riêng biệt trong giao diện người dùng ngay bây giờ.

Building Startups Google Contacts API - List of Imported Contacts on Friends Page

Chọn người những tham gia cuộc họp

Sẽ trở nên dễ dàng hơn cho mọi người thêm bạn bè từ liên hệ của họ bằng cách gõ vài ký tự đầu tiên. Tôi đang sử dụng widget Typeahead trong cử sổ pop-up Add Participants ở bên dưới:

Building Startups Google Contacts API - Add a Participant Form

Sau khi tôi import Google Contacts của mình, chúng được tích hợp với bạn bè của tôi (những người tôi từng mời tham gia cuộc họp hoặc người đã mời tôi tham giam).

Trong trường hợp này, tôi gõ sar và một nhóm toàn bộ các tên có tiền tố Sar- xuất hiện:

Building Startups Google Contacts API - Dropdown from Friend and Address Table

Việc tìm bất kỳ ai để mời tham gia một cuộc họp từ Google Contacts của bạn khá nhanh chóng và dễ dàng (cho đến khi bạn thêm nhiều người trong số họ, tôi đề cập thêm bên dưới).

Vấn đề bảo mật

Tôi cũng không muốn lạm dụng lòng tin của mọi người bằng cách sử dụng không tốt hàng nghìn Contacts của họ. Thậm chí tại thời điểm này, chúng tôi sẽ không đề xuất cơ hội để họ mời tất cả Google contacts của họ tham gia Meeting Planner, dù chúng tôi có thể đề xuất tính năng này trong tương lai. Chúng tôi chắc chắn sẽ không gửi email hàng loạt mà không được phép.

Xây dựng code

Nếu bạn chưa thử qua, hãy xem bài Building Your Startup With PHP: Simplifying Onramp With OAuth. Đó là lần đầu tiên tôi xác thực Google APIs cho OAuth Login và Sign-up.

Google cẩn trọng vấn đề bảo mật với API của họ. Vì những gì gần đây đã xảy ra với vụ hack Yahoo, tôi đánh giá rất cao điều này. Tuy nhiên, điều này làm cho APIs của Google khó xác thực hơn khi làm việc.

Trên thực tế, tôi đã thấy Google Contacts API phát sinh một số bối rối, bực bội và khó khăn mà tôi đã phải viết ra. Và Google API không thích các lập trình viên PHP - chúng tôi là người cuối cùng nhận bản code mẫu.

Hãy dấn thân vào nó nào.

Tạo bảng Address

Vì đã có một bảng UserContact cho điện thoại của user và các địa chỉ Skype, tôi quyết định gọi tên bảng là Address. Đây là migration để tạo bảng này:

Tất nhiên, tôi đã sử dụng Gii của Yii để giúp tôi làm việc với controller, model và view. Điều này đã được đề cập trước đó trong loạt bài startup.

Mở rộng xác thực Google API

Bạn có thể nhớ đến trang Google Credentials trong hướng dẫn được nhắc đến ở bên trên:

Building Startups Google Contacts API - Google API Credentials Form

Bạn có thể tìm thấy nó trong Google Developers Console.

Bạn phải bổ sung URL cho tất cả các môi trường của mình — development, staging, production, v.v. — và cho mỗi controller và method. Điều này làm bạn nỗ lực hơn khi làm việc với Contacts API, nhưng có thể bảo vệ dữ liệu của mọi người tốt hơn.

Building Startups Google Contacts API - Google API Credentials Form lower part

Nhập danh bạ Google

Đây là Google Contacts API v3.0 (phiên bản 3.0). Tôi đã không để ý rằng People API chỉ dùng cho mục đích đọc vào thời điểm tôi bắt đầu viết viết code. Thật không may, code của tôi đang sử dụng read/write API (đọc và ghi được). Được rồi, vì tôi không phải là một thiên tài. Các doanh nhân cũng hiếm khi là nhân tài - kể cả Bill Gates nói ông ta chỉ may mắn.

Nói chung, tôi thấy Google Contacts API là một trong những API rối rắm và khó hiểu nhất mà tôi từng sử dụng.

Nếu tôi có trình độ chuyên môn cao hơn ở phần phát triển Google API hoặc dành nhiều thời gian hơn cho việc này, có thể tôi đã tìm ra cách tiếp cận đơn giản hơn. Nhưng, từ những gì tôi có thể nói, quan trọng là bạn phải làm mọi thứ với API từ một URL. Trong trường hợp của tôi https://meetingplanner.io/address/import.

Và Google trả về các keys (khoá) và chuyển hướng bạn trở lại URL này nhiều lần — vì vậy bạn cần phải xem trạng thái (state) của API và tìm giải pháp.

Tôi cho rằng tất cả điều này được thực hiện để tăng cường bảo mật, nhưng đòi hỏi phần quản lý trạng thái (state) được xây dựng cho các API request đơn giản. Phần quản lý trạng thái có thể tiết kiệm thời gian, nhưng chỉ đúng khi có tài liệu và code mẫu tốt. Trong trường hợp này, đối với PHP, điều này không đúng.

Khởi đầu

Hãy xem AddressController.php actionImport():

Ở bên trên, tôi đang xem liệu Google có muốn thiết lập lại lại các API token của nó không. Trong trường hợp này, tôi xóa các cookie mà tôi đã lưu và chuyển hướng trở để bắt đầu lại.

Yêu cầu cấp một Token

Ở bên dưới đây, tôi đang đưa ra yêu cầu đầu tiên của mình cho Google thông qua thư viện ứng dụng PHP của nó:

Thư viện Google PHP đang trong giai đoạn thử nghiệm. Trong thực tế, PHP nói chung là sự bổ sung muộn của Google. Vì vậy, không dễ dàng khi dùng PHP với APIs của Google.

Chú ý ở bên trên $redirect_uri của Google dùng cùng một phương thức: 'address/import'.

Tiếp theo, chúng tôi cố lưu token từ tham số truy vấn trong cookie:

Nếu bạn nhận được code từ Google, bạn phải thiết lập mã đó trong cookie và chuyển hướng trở về lại chính trang đó. Với tôi điều này thật kỳ quặc.

Thật thú vị, tôi cũng thấy rằng nếu tôi không tạo ra một vòng lặp lại khi code bị thiếu - để quay trở lại chính trang đó một lần nữa, nó sẽ hoạt động không ổn định.

Sau đó, chúng tôi xây dựng và yêu cầu Google hiển thị một hộp thoại cho người dùng để cấp quyền truy cập vào Meeting Planner cho các liên hệ của họ:

Building Startups Google Contacts API - Google Asks User for Permissions

Tôi đã phải bổ sung rất nhiều cho phần quản lý lỗi để tìm ra lý do tại sao nó không hoạt động và để chúng vận hành một cách nhất quán.

Bạn đoán xem, nếu có một điều kiện lỗi, tôi thường sẽ chuyển hướng về cùng một phương thức của controller đó.

Xử lý dữ liệu được trả về

Khi mọi thứ vận hành tốt, code dễ dàng xử lý dữ liệu. Hiện tại, chúng tôi lấy 1.000 lần nhập với năm lần, những yêu cầu phân trang lên tục được xây dựng, tất nhiên, được gửi trở lại URL này:

Việc biên dịch XML của Google (cũng phức tạp, với các tên biến kỳ lạ ​​dành cho các nhà phát triển PHP, ví dụ như các phím như $ contact $contact['gd$email'][0]['address'] với ký hiệu đô la ($) ở giữa.

Dưới đây, chúng tôi đang xây dựng từng yêu cầu, chạy xuyên suốt dữ liệu JSON và lấy tên liên hệ để bổ sung vào bảng Address:

Làm việc với Google Contacts API siêu khó, không được hướng dẫn đầy đủ và tôi tốn rất nhiều thời gian. Trong khi tôi đã từng làm việc thành công với rất nhiều API, tôi biết tôi không phải là một chuyên gia trong việc này. Về vấn đề về bảo mật, tôi thực sự không muốn đối đầu với Google trong việc này, có lẽ họ biết tại sao họ làm việc theo những cách nhất định.

Nhưng đùa một chút cho vui vẻ cũng được, phải không?

Trước tiên, mỗi người ở Google đều là tài năng, và họ đã chứng tỏ điều đó một lần nữa bằng cách thâu tóm API.ai, một dịch vụ tuyệt vời liên kết nút Sign Up của nó đến Login Form của chính nó. Thực sự, họ đã làm được:

Tôi chắc rằng đội ngũ cần mẫn của Google đã nhìn thấy các tài năng trong đó, họ vẫn tồn tại bên cạnh những người như tôi. Họ đã phải nói, "ôi, các lập trình viên API.ai là những thiên tài giống như các đội ngũ AdSense và DFP của chúng ta! Hãy bổ sung họ vào Alphabet!"

Vì tôi có thể nói chuyện với các nhà đầu tư VC về Meeting Planner trong tương lai, tôi muốn trở nên khiêm tốn. Nhưng tôi sẽ kinh hãi nếu trang chủ của tôi đã làm điều này và một trong những nhà đầu tư tiềm năng của tôi nhận thấy.

Công ty Alphabet mới (công ty mẹ mới của Google) rất độ lượng.

Mở rộng form bổ sung người tham gia

Cuối cùng, chúng ta hãy nhìn vào code đằng sau form Add Participants mở rộng. Về cơ bản, tôi lấy các email từ bảng Friends và sau đó là các email từ bảng Address:

Tuy nhiên, giá trị chọn lựa chỉ là email vì mọi thứ sẽ trở nên phức tạp hơn khi xác định kiểu friend nào (từ bảng Friend hay từ bảng Address).

Tôi không quá tự hào về code và cách tiếp cận ở trên, nhưng việc gấp rút cho ra phiên bản beta, tôi đã thỏa hiệp để hoàn thành nó.

Với 5.000 tên liên hệ của Google trong danh sách bạn bè của tôi, hiệu suất sẽ chậm hơn. Có lẽ tôi tốt hơn cần phải liên kết phần điều khiển đến một cách tìm kiếm qua database bằng AJAX thật sớm.

Và tôi đã lãng phi nhiều thời gian để cố gắng mở rộng bảng Friends để lấy những người tôi đã gửi mời, cũng như với danh bạ Google. Tuy nhiên, việc này dẫn đến mốt mớ hỗn độn các truy vấn dữ liệu có liên quan đến database, rất khó quản lý. Các mối quan hệ của bảng User từ bảng Friends bắt đầu phá vỡ các hàng dữ liệu Contacts, nơi chúng sẽ xét là null, và điều này thực sự rất khó giải quyết. Việc quản lý để loại bỏ các foreign key hiện có thông qua migration cũng rất nguy hiểm.

Tổng kết

Các tính năng này là những ví dụ tuyệt vời về những thách thức khi sử dụng các API có tài liệu được biên soạn kém trong ngôn ngữ lập trình bạn chọn và chọn lựa thỏa hiệp trong kiến ​​trúc code vào thời điểm khởi chạy các tính năng để phát hành.

Và vẫn còn những vấn đề với hiệu suất của việc thêm Participant và UX của trang Friend cần phải được sửa lại.

Thành thật mà nói, phạm vi của Meeting Planner đã đạt đến giai đoạn nản lòng với chỉ sức của một người làm. Và sẽ rất hữu ích khi có nhiều tài nguyên hơn (như các thành viên của đội nhóm.)

Cuối cùng, nếu bạn chưa thử qua, hãy lên lịch cuộc họp đầu tiên của bạn với Meeting Planner ngay bây giờ! Hãy cho tôi biết suy nghĩ của bạn trong phần bình luận bên dưới. Bạn cũng có thể liên hệ với tôi @reifman. Tôi luôn cởi mở với các ý tưởng về tính năng mới và các chủ đề cho các bài hướng dẫn trong tương lai.

Một bài hướng dẫn về huy động vốn từ cộng đồng cũng đang được thực hiện, vì vậy, hãy theo dõi trang WeFunder Meeting Planner của chúng tôi.

Hãy đón chờ tất cả điều này và các hướng dẫn sắp tới khác bằng cách xem loạt bài Building Your Startup With PHP.

Liên kết liên quan

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.