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

Xây Dựng Trang Khởi Nghiệp: Thiết Kế RESTful API

by
Difficulty:IntermediateLength:LongLanguages:
This post is part of a series called Building Your Startup With PHP.
Building Your Startup: Running Multiple Domains
Building Your Startup With PHP: Bootstrap Your Home Page

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

Final product image
What You'll Be Creating

Bài hướng dẫn này là một phần của loạt bài Xây Dựng Trang Khởi Nghiệp với PHP trên Envato Tuts+.Trong nhóm bài này, Tôi sẽ hướng dẫn bạn dựng một trang khởi nghiệp từ ý tưởng đến thực hành với ví dụ thực tiễn là ứng dụng Meeting Planner của tôi. Ở mỗi bước, tôi sẽ demo với mã nguồn mở của Meeting Planner để làm ví dụ cho bạn theo dõi. Tôi cũng sẽ chỉ ra những vấn đề có thể phát sinh có liên quan đến việc khởi nghiệp.

Tại Sao Xây Dựng API cho Trang Khỏi Nghiệp của Bạn?

Lý do chính tôi bổ sung thêm phần API cho Meeting Planner thời điểm này là để tạo nền tảng để xây dựng ứng dụng di động iOS. Ứng dụng sẽ dùng API để đăng ký và đăng nhập, sau đó cho phép họ lên lịch các cuộc họp.

APIs cũng có tác dụng phụ giúp bạn nghĩ kỹ và tổ chức tốt hơn tất cả mã nguồn bạn đã viết nhiều ngày trước. Dĩ nhiên có những mã nguồn của Meeting Planner đã trở nên phức tạp. Nay tôi cần đơn giản hoá nó lại cho ứng dụng đi động để đưa các tính năng nổi bật thành mã nguồn độc lập.

Có thể có những lý do khác trong tương lai cho việc dựng API. Ví dụ, tôi tạo điều kiện các người phát triển của bên thứ ba mở rộng các loại cuộc họp và sự kiện cho Meeting Planner, cho phép họ thu thập và chia sẻ những dữ liệu bổ sung trong quá trình họp.

Xin nhắc các bạn, tất cả mã nguồn của Meeting Planner được cung cấp là mã nguồn mở và viết bằng nền tảng Yii2 của PHP. Một phần quan trong của bài mô tả cách sử dụng nền tảng Yii để hỗ trợ API. Nếu bạn muốn học thêm về nền tảng Yii2, hãy ghé đọc loạt bài Lập Trình Cùng Yii2 của tôi.

Trước khi đào sâu vào mã nguồn API, tôi khuyến khích bạn thử lên lịch cuộc họp đầu tiên để bạn biết tôi đang nói đến điều gì.

Nếu bạn có câu hỏi về bài viết hoặc về ứng dụng, tôi tham gia phần thảo luận bên dưới, và bạn có thể tìm tôi qua Twitter @lookahead_io. Tôi luôn cởi mở với ý tưởng cho tính năng mới của Meeting Planner và những gợi ý cho bài viết trong tương lai.

Thiết Kế API của Bạn

Khi tôi chuẩn bị xây dựng API, có vãi khái niệm tôi cần phải hiểu. Tôi đã đề cập đến chúng ở bài Lập Trình với Yii2: Xây Dựng RESTful API (Envato Tuts+).

Đầu tiên, tôi cần tạo ra một điểm cuối cho API để đón tất cả yêu cầu từ ứng dụng di động. Tôi quyết định sử dụng một tên miền độc lập từ bài viết nền tảng Yii Ứng Dụng Cao Cấp, ví dụ https://api.meetingplanner.io thay vì https://meetingplanner.io/api/. Điều này cho phép phân biệt rõ ràng mã nguồn API với các phần còn lại của dịch vụ.

Thứ hai, tôi cần thiết kế sự bảo mật cho API. Trong hướng dẫn hôm nay, tôi sẽ minh hoạ phương pháp bảo mật nhập môn đơn giản tôi đang sử dụng, nhưng chúng tôi sẽ củng cố nó qua thời gian, và tôi có thể viết nhiều về đề tài này trong tương lai. Có một khía cạnh của bảo mật trong việc chúng tôi dùng và chuyển tải các khoá và yêu cầu của API như thế nào, nhưng cũng rất quan trọng khi chắc rằng API ràng buộc ứng dụng giao thức bảo mật. Ví dụ, một người dùng không thể gửi yêu cầu đến các người tham gia của cuộc họp nếu như đó không phải là người tổ chức cuộc họp hoặc là thành viên trong cuộc họp.

Thứ ba, tôi muốn chuẩn bị mã nguồn API để phiên bản hoá. Ví dụ, một ứng dụng iOS cũ chưa được cập nhât sẽ gọi API phiên bản 1.0, trong khi bản mới hơn có thể gọi API phiên bản 2.0. Yii cung cấp phương thức để làm việc này, nhưng tôi chưa triển khai chúng trong lần thiết kế này. 

Thứ tư, tôi muốn tuân thủ các tiêu chuẩn REST với mức độ tối đa. Đó là điều tôi đã bắt đầu thực hiện nhưng sẽ cần nhiều nghiên cứu để triển khai đầy đủ.

Cuối cùng, bây giờ, tôi cần chỉ ra nhóm chức năng mà API sẽ cung cấp. Khởi đầu, dành cho việc phát triển của ứng dụng di động, tôi tập trung tạo ra chức năng chuyên đọc (read-only) dữ liệu. Bài viết và mã nguồn hôm nay sẽ chủ yếu tập trung vào chức năng chuyên đọc của ứng dụng, ví dụ như cho tôi xem những cuộc họp của người dùng. Nhưng cũng gồm có phần đăng ký người dùng mới. Sắp tới chúng ta sẽ bổ sung thêm chức năng ghi dữ liệu như tạo một cuộc họp, thêm người tham dự, thêm địa điểm họp, hoàn tất thư mời, v,v

Hãy xem bài hướng dẫn này là bước khởi đầu để tiến đến một dịch vụ API mạnh mẽ và toàn vẹn cho ứng dụng của chúng ta.

Xây Dựng API

Tạo Cấu Trúc Dịch Vụ API

Building Your Startup - the API tree

Meeting Planner dùng nền tảng Ứng Dụng Cao Cấp Yii, gồm một cấu trúc front-end cho ứng dụng và cấu trúc back-end cho các thành phần quản trị, và chúng ta sẽ tạo ra cấu trúc thứ 3 cho API.

Tôi đã mô tả cách thực hiện trong Lập Trình với Yii2: Xây Dựng RESTful API (Envato Tuts+)

Trước hết, tôi tạo bản sao cấu trúc back-end và các thiết lập môi trường liên quan.

Và tôi thêm @api alias cho file /common/config/bootstrap.php

Kế đến, chúng ta bắt đầu xây dựng chức năng cốt lõi.

Bảo Mật cho API

Tôi đã tạo ra phần bảo mật cơ bản khi chúng ta xây dựng và kiểm ra ứng dụng iOS. Tôi sẽ cải tiến hơn cho chúng về sau. 

Tất cả yêu cầu gọi API sẽ cần biết app_idapp_secret. Những dữ liệu này sẽ được truyền tải theo vào hình thái của giao thức HTTPS. Tuy nhiên, không có bảo đảm rằng ta có thể bảo vệ chúng, vì vậy chúng ta cần nỗ lực thiết kế để ứng dụng có khả năng chống lại sự phơi bày của các giá trị quan trọng này.

Hiện tại, tôi đã phát triển tập tin mp.ini để trong /var/secure để chứa các giá trị này.

Sau đó, tôi tạo ra mô hình Service.php để quản lý phần thẩm định những giá trị quan trọng này. Khi chúng ta cải thiện cho nó tốt hơn , tôi sẽ chỉ cần chỉnh sửa một đoạn mã nguồn.

Tiếp theo, tôi thiết lập hàm beforeAction ở tất cả các controllers của API để sử dụng lại phương thức phía trên.

Điểm yếu mấu chốt là các giá trị quan trọng cần bảo mật được truyền tải qua mỗi lần gọi và các tham số truy vấn không được mã hoá. HTTPS có thể giúp vấn đề này nhưng sẽ không hoàn toàn bảo mật. Tôi sẽ cải thiện điều này trong tương lai.

Đăng Ký và Đăng Nhập

Hai cách gọi API hoàn toàn dựa trên các giá trị khoá của API là đăng ký và đăng nhập. Người dùng di động có thể đăng ký thông qua OAuth và gửi chúng ta những giá trị mã hoá đặc thù (tokens) của dịch vụ OAuth.

Khi nhận được, mỗi người dùng sẽ có một token độc nhất, và token này sẽ bảo vệ những lần gọi API tiếp theo.

Có nhiều điều tôi cần làm để cải tiến phần bảo mật, nhưng tôi sẽ không đề cập chuyện đó hôm nay.

Đây là mã nguồn khởi tạo để đăng ký một người dùng qua API và tạo ra một token:

UserToken là một chuỗi 40 ký tự ngẫu nhiên và duy nhất, rất khó đoán, thậm chí còn hơn cả việc tin rằng người Mỹ sẽ bầu cho Donald Trump dẫn dắt họ.

Meeting Controller

Bây giờ, hãy xem qua phần yêu cầu thông tin về các cuộc họp. Đây là phần đầu của file /api/controllers/MeetingController.php:

Chú ý cách mỗi action xác nhận xem các token có đúng không.

Sau đó, mỗi lần gọi API cho Meetings đều được cấu trúc đồng nhất, như trình bày bên dưới:

Thời điểm hiện tại, mỗi lần gọi gồm có $app_id, $app_secret, và $token cho người dùng đã đăng nhập, tôi sẽ thay đổi việc này để bảo mật hơn trong thời gian tới. Hiện nó an toàn, nhưng không tuyệt đối.

Hãy xem xét actionList, hàm này liệt kê các cuộc họp của người dùng, được lọc ra bởi tham số $status:

Cuối cùng, API có giới hạn số lần yêu cầu gọi thông tin của cuộc họp cho từng trạng thái, ví dụ, cho tôi xem 15 cuộc họp gần nhất ở trạng thái đang lên kế hoạch bở một người dùng.

Tất cả phương thức Meeting được xây dựng trên mô hình Meeting API. Đây là mã nguồn cho meetinglist():

Đầu tiên, phương thức xác minh Token có phải từ người dùng.

Đây là mã nguồn cho UserToken::lookup():

Sau đó, chúng ta kiểm tra bộ lọc cho $status and fetch giá trị $timezone của người dùng.

Và cuối cùng, chúng ta truy vấn danh sách các cuộc họp của người dùng và chuyển chúng thành một mảng các đối tượng.

Trong khi có một cách dễ hơn để xếp đặt dữ liệu được trả về cho API, thì tự chuyển đổi bảng dữ liệu phức tạp nhất, Meeting, cho phép tôi điều khiển phần dữ liệu API cung cấp cho nhà phát triển. Điều này thực sự là cơ hội để tôi cải thiện và đơn giản hoá API so với phần nguyên bản của mã nguồn và thuộc tính của cơ sở dữ liệu.

Ví dụ, có đoạn mã mà Meeting Planner phải sinh ra các tiêu đề phụ ở giao diện người dùng mà không được lưu trong cơ sở dữ liệu. Thay vì yêu cầu ứng dụng iOS nhân bản đoạn mã phức tạp này, chúng ta chỉ cần sinh ra tiêu đề phụ và trả kết quả qua API.

Gọi API

Đây là cách cơ bản để gọi và kiểm tra API. Ví dụ, nếu tôi truy cập đường dẫn dưới đây:

Nó sẽ hoạt đông. Nhưng để kiểm tra và chắc chắn điều này, tôi đã dùng Postman, một ứng dụng mở rộng Chrome và hoạt động cực kỳ hữu dụng.

Đây là cách bạn có thể tạo yêu cầu gọi API với Postman UX.

Building Your Startup - Postman API Requests

Và đây là các kết quả nhận được.

Building Your Startup - Postman API Results

Đó chỉ là một cách dễ dàng để duyệt nội dung nguyên bản của phần phát triển, cho phép hiển thị tất cả cuộc họp của tôi.

Thế là đủ cho lúc này. Bạn có thể duyệt và xem nhiều hơn từ các phương thức khác qua phiên bản chính thức của API. Khi tôi nâng cầp phần bảo mật và cải tiến tính năng của API, tôi sẽ cố gắng viết nhiều hơn về nó.

Tiến Về Phía Trước

Tôi hy vọng bạn thấy bài hướng dẫn thú vị. Tất nhiên, API sẽ phát triển và thay đổi khi phần phát triển di động tiến triển. Như tôi đã nói, tôi đang cải tiến phần bảo mật và mở rộng phần tính năng.

Nếu bạn vẫn chưa thử, hãy lên lịch cuộc họp đầu tiên với Meeing Planner ngay bây giờ!

Bạn cũng có thể tìm đến tôi qua kênh @lookahead_io. Tôi luôn cởi mở với những ý tưởng cho tình năng mới và việc đề xuất các chủ đề cho những bài viết trong tương lai. Hoặc thử qua dịch vụ hỗ trợ của chúng tôi và mở báo cáo về lỗi hay thẻ yêu cầu tính năng.

Hãy chờ những bài hướng dẫn tiếp theo của serie Xây Dựng Trang Khởi Nghiệp với PHP.

Các 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.