PHP gọi dịch vụ web REST

API REST là xương sống của phát triển web hiện đại. Hầu hết các ứng dụng web ngày nay được phát triển dưới dạng các ứng dụng một trang trên giao diện người dùng, được kết nối với các API phụ trợ được viết bằng nhiều ngôn ngữ khác nhau. Có rất nhiều framework tuyệt vời có thể giúp bạn xây dựng REST API một cách nhanh chóng. Nền tảng API của Laravel/Lumen và Symfony là những ví dụ được sử dụng thường xuyên nhất trong hệ sinh thái PHP. Họ cung cấp các công cụ tuyệt vời để xử lý yêu cầu và tạo phản hồi JSON với mã trạng thái HTTP chính xác. Chúng cũng giúp dễ dàng xử lý các vấn đề phổ biến như xác thực/ủy quyền, xác thực yêu cầu, chuyển đổi dữ liệu, phân trang, bộ lọc, điều chỉnh tốc độ, điểm cuối phức tạp với tài nguyên phụ và tài liệu API

Bạn chắc chắn không cần một framework phức tạp để xây dựng một API đơn giản nhưng an toàn. Trong bài viết này, tôi sẽ chỉ cho bạn cách xây dựng một API REST đơn giản trong PHP từ đầu. Chúng tôi sẽ làm cho API trở nên an toàn bằng cách sử dụng Okta làm nhà cung cấp ủy quyền của chúng tôi và triển khai Luồng thông tin xác thực của khách hàng. Okta là một dịch vụ API cho phép bạn tạo, chỉnh sửa và lưu trữ an toàn tài khoản người dùng và dữ liệu tài khoản người dùng, đồng thời kết nối chúng với một hoặc nhiều ứng dụng

Có các luồng xác thực khác nhau trong OAuth 2. 0, tùy thuộc vào việc ứng dụng khách là công khai hay riêng tư và liệu có người dùng tham gia hay chỉ giao tiếp giữa máy với máy. Luồng thông tin xác thực ứng dụng khách phù hợp nhất cho giao tiếp giữa các máy trong đó ứng dụng khách ở chế độ riêng tư (và có thể được tin cậy để giữ bí mật). Ở cuối bài, tôi sẽ chỉ cho bạn cách xây dựng một ứng dụng khách thử nghiệm.

Mục lục

Tạo khung dự án PHP cho API REST của bạn

Chúng tôi sẽ bắt đầu bằng cách tạo một thư mục

vendor/
.env
9 và một tệp
OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
0 đơn giản trong thư mục trên cùng chỉ với một phụ thuộc (hiện tại). thư viện DotEnv sẽ cho phép chúng tôi giữ chi tiết xác thực Okta của mình trong tệp
OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
1 bên ngoài kho lưu trữ mã của chúng tôi

OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
0

{
    "require": {
        "vlucas/phpdotenv": "^2.4"
    },
    "autoload": {
        "psr-4": {
            "Src\\": "src/"
        }
    }
}

Chúng tôi cũng đã định cấu hình trình tải tự động PSR-4 sẽ tự động tìm các lớp PHP trong thư mục

vendor/
.env
9

Chúng tôi có thể cài đặt các phụ thuộc của mình ngay bây giờ

composer install

Bây giờ chúng tôi có một thư mục

OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
4 và phần phụ thuộc DotEnv đã được cài đặt (chúng tôi cũng có thể sử dụng trình tải tự động của mình để tải các lớp của chúng tôi từ
vendor/
.env
9 mà không cần lệnh gọi
OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
6)

Hãy tạo một tệp

OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
7 cho dự án của chúng tôi với hai dòng trong đó, vì vậy thư mục
OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
4 và tệp
OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
1 cục bộ của chúng tôi sẽ bị bỏ qua

vendor/
.env

Tiếp theo, chúng tôi sẽ tạo một tệp

OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
40 cho các biến xác thực Okta của chúng tôi

OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
40

OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=

và một tệp

OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
1 nơi chúng tôi sẽ điền thông tin chi tiết thực tế của mình từ tài khoản Okta của chúng tôi sau (nó sẽ bị Git bỏ qua vì vậy nó sẽ không kết thúc trong kho lưu trữ của chúng tôi)

Chúng tôi sẽ cần một tệp

OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
43 để tải các biến môi trường của chúng tôi (sau này, nó cũng sẽ thực hiện một số bước khởi động bổ sung cho dự án của chúng tôi)

OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
43

OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
4

Định cấu hình cơ sở dữ liệu cho PHP REST API của bạn

Chúng tôi sẽ sử dụng MySQL để cung cấp năng lượng cho API đơn giản của chúng tôi. Chúng tôi sẽ tạo cơ sở dữ liệu và người dùng mới cho ứng dụng của chúng tôi

OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
1

API còn lại của chúng tôi sẽ chỉ xử lý một thực thể duy nhất. Người, với các trường sau. ________ 145, ________ 146, ________ 147, ________ 148, ________ 149. Nó sẽ cho phép chúng tôi xác định mọi người và tối đa hai phụ huynh cho mỗi người (liên kết đến các bản ghi khác trong cơ sở dữ liệu của chúng tôi). Hãy tạo bảng cơ sở dữ liệu trong MySQL

OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
7

Chúng tôi sẽ thêm các biến kết nối cơ sở dữ liệu vào tệp

OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
40 của chúng tôi

OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
40

OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
0

Sau đó, chúng tôi sẽ nhập thông tin đăng nhập địa phương của mình vào. env (không được lưu trữ trong repo, nhớ chứ?)

OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
1

OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
2

Bây giờ chúng ta có thể tạo một lớp để giữ kết nối cơ sở dữ liệu của mình và thêm phần khởi tạo kết nối vào bootstrap của chúng ta. tập tin php

OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
13

OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
4

OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
43 (bản đầy đủ)

composer install
0

Hãy tạo một tệp

OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
15 để tạo bảng
OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
16 của chúng ta và chèn một số bản ghi vào đó để kiểm tra

OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
15

composer install
1

Cơ sở dữ liệu của chúng tôi đã hoàn tất. Nếu bạn muốn đặt lại nó, chỉ cần thả bảng

OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
18 vào MySQL rồi chạy
OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
19 (Tôi không thêm câu lệnh drop vào seeder để đề phòng chạy nhầm)

Thêm một lớp cổng cho bảng người

Có nhiều mẫu để làm việc với cơ sở dữ liệu trong ngữ cảnh hướng đối tượng, từ thực thi đơn giản các câu lệnh SQL trực tiếp khi cần (theo cách thủ tục) đến các hệ thống ORM phức tạp (hai trong số các lựa chọn ORM phổ biến nhất trong PHP là Eloquent và Doctrine). Đối với API đơn giản của chúng tôi, cũng nên sử dụng một mẫu đơn giản, vì vậy chúng tôi sẽ sử dụng Cổng bảng. Chúng tôi thậm chí sẽ bỏ qua việc tạo một lớp

OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
16 (như mẫu cổ điển sẽ yêu cầu) và chỉ cần tạo lớp
OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
71. Chúng tôi sẽ triển khai các phương thức để trả về tất cả các bản ghi, trả về một người cụ thể và thêm/cập nhật/xóa một người

OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
72

composer install
2

Rõ ràng, trong một hệ thống sản xuất, bạn sẽ muốn xử lý các ngoại lệ một cách duyên dáng hơn thay vì chỉ thoát ra với một thông báo lỗi

Dưới đây là một số ví dụ về việc sử dụng cổng

composer install
3

Triển khai API PHP REST

Chúng tôi sẽ triển khai API REST ngay bây giờ với các điểm cuối sau

composer install
4

Chúng tôi sẽ tạo một tệp

OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
73 để đóng vai trò là bộ điều khiển phía trước và xử lý các yêu cầu, đồng thời tạo một tệp
OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
74 để xử lý các điểm cuối API (được gọi từ bộ điều khiển phía trước sau khi xác thực URI)

OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
75

composer install
5

OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
74

composer install
6

Bạn có thể kiểm tra API bằng công cụ như Postman. Đầu tiên, vào thư mục dự án và khởi động máy chủ PHP

composer install
7

Sau đó kết nối với

OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
77 bằng Postman và gửi yêu cầu http. Ghi chú. khi thực hiện các yêu cầu PUT và POST, hãy đảm bảo đặt loại Nội dung thành
OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
78, sau đó dán tải trọng ở định dạng JSON và đặt loại nội dung thành JSON (application/json)

Bảo mật API PHP REST của bạn bằng OAuth 2. 0

Chúng tôi sẽ sử dụng Okta làm máy chủ ủy quyền của mình và chúng tôi sẽ triển khai Luồng thông tin xác thực của khách hàng. Luồng được đề xuất để xác thực giữa các máy khi máy khách ở chế độ riêng tư và hoạt động như thế này. Ứng dụng khách giữ ID khách hàng và Bí mật;

Trước khi bắt đầu, bạn sẽ cần một tài khoản nhà phát triển Okta miễn phí. Cài đặt Okta CLI và chạy

OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
79 để đăng ký tài khoản mới. Nếu bạn đã có tài khoản, hãy chạy
OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
00. Sau đó, chạy
OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
01. Chọn tên ứng dụng mặc định hoặc thay đổi tên khi bạn thấy phù hợp

Okta CLI làm gì?

Okta CLI sẽ tạo OAuth 2. 0 Ứng dụng dịch vụ trong Okta Org của bạn. Bạn sẽ thấy đầu ra như sau khi hoàn thành

composer install
8

Chạy

OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
02 (hoặc
OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
03 trên Windows) để xem nhà phát hành và thông tin đăng nhập cho ứng dụng của bạn

composer install
9

Tên miền Okta của bạn là phần đầu tiên của công ty phát hành của bạn, trước

OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
04

GHI CHÚ. Bạn cũng có thể sử dụng Bảng điều khiển dành cho quản trị viên Okta để tạo ứng dụng của mình. Xem Tạo ứng dụng dịch vụ để biết thêm thông tin

Đây là những thông tin đăng nhập mà ứng dụng khách của bạn sẽ cần để xác thực. Đối với ví dụ này, mã máy khách và máy chủ sẽ nằm trong cùng một kho lưu trữ, vì vậy chúng tôi cũng sẽ thêm các thông tin xác thực này vào tệp

OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
1 của mình (đảm bảo thay thế
OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
06 và
OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
07 bằng các giá trị từ trang này)

Thêm vào

OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
40

vendor/
.env
0

Thêm các khóa và giá trị này vào

OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
1

vendor/
.env
1

Đăng nhập vào Bảng điều khiển dành cho quản trị viên Okta (mẹo. chạy

OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
00, mở URL trong trình duyệt). Điều hướng đến Bảo mật> API. Chọn Máy chủ ủy quyền mặc định của bạn. Nhấp vào biểu tượng Chỉnh sửa, chuyển đến tab Phạm vi và nhấp vào Thêm phạm vi để thêm phạm vi cho API REST. Đặt tên cho nó là
OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
21 và chọn Đặt làm phạm vi mặc định

Thêm phạm vi vào

OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
40

vendor/
.env
2

và khóa có giá trị là

OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
1

vendor/
.env
3

Thêm xác thực vào PHP REST API của bạn

Chúng tôi sẽ sử dụng thư viện Okta JWT Verifier. Nó yêu cầu thư viện JWT (chúng tôi sẽ sử dụng

OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
24) và thư viện tuân thủ PSR-7 (chúng tôi sẽ sử dụng
OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
25). Chúng tôi sẽ cài đặt mọi thứ thông qua nhà soạn nhạc

vendor/
.env
4

Bây giờ chúng tôi có thể thêm mã ủy quyền vào bộ điều khiển phía trước của mình (nếu sử dụng khung, thay vào đó, chúng tôi sẽ thực hiện việc này trong phần mềm trung gian)

OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
75 (bản full cho rõ)

vendor/
.env
5

Xây dựng Ứng dụng khách mẫu (Tập lệnh dòng lệnh) để kiểm tra API PHP REST

Trong phần này, chúng tôi sẽ thêm một ứng dụng khách đơn giản (tập lệnh dòng lệnh sử dụng curl) để kiểm tra API REST. Chúng tôi sẽ tạo một tệp php mới 'public/clients. php’ với quy trình rất đơn giản. nó sẽ truy xuất các chi tiết Okta (nhà phát hành, phạm vi, id ứng dụng khách và bí mật) từ. env, thì nó sẽ lấy mã thông báo truy cập từ Okta và nó sẽ chạy các lệnh gọi API để nhận tất cả người dùng và nhận một người dùng cụ thể (chuyển mã thông báo truy cập Okta trong tiêu đề Ủy quyền)

OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
27

vendor/
.env
6

Bạn có thể chạy ứng dụng từ dòng lệnh bằng cách vào thư mục

OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
28 và chạy

vendor/
.env
7

(Đừng quên khởi động máy chủ nếu bạn chưa có. )

composer install
7

Đó là nó

Tìm hiểu thêm về PHP, API REST an toàn và OAuth 2. 0 Quy trình xác thực khách hàng

Bạn có thể tìm thấy tất cả mã từ ví dụ này trên GitHub, trong kho lưu trữ oktadeveloper/okta-php-core-rest-api-example

Nếu bạn muốn tìm hiểu sâu hơn về các chủ đề được đề cập trong bài viết này, các tài nguyên sau đây là điểm khởi đầu tuyệt vời

  • Tổng quan về xác thực Okta
  • Thêm Xác thực vào Ứng dụng PHP của bạn sau 5 phút
  • Xây dựng đăng nhập đơn giản trong PHP

Giống như những gì bạn đã học ngày hôm nay?

Làm cách nào tôi có thể truy cập API REST trong PHP?

Tạo khung dự án PHP cho API REST của bạn
Định cấu hình cơ sở dữ liệu cho PHP REST API của bạn
Thêm một lớp cổng cho bảng người
Triển khai API PHP REST
Bảo mật API REST PHP của bạn bằng OAuth 2. 0
Thêm xác thực vào PHP REST API của bạn

Làm cách nào để gửi dữ liệu tới API REST trong PHP?

Để gửi dữ liệu đến máy chủ API REST bằng PHP, bạn phải thực hiện yêu cầu HTTP POST và đưa dữ liệu POST vào phần thân của yêu cầu . Bạn cũng cần cung cấp Loại nội dung. tiêu đề yêu cầu application/json và Content-Length. Dưới đây là ví dụ về yêu cầu POST API REST tới điểm cuối ReqBin REST API.

Chúng tôi có thể gọi API REST từ trình duyệt không?

API REST sử dụng một số phương thức HTTP để thực hiện các hành động khác nhau trên tài nguyên REST. Mọi lệnh gọi API REST sử dụng phương thức HTTP GET đều có thể được gửi bằng trình duyệt Web chẳng hạn như Microsoft Internet Explorer hoặc Mozilla Firefox.

Dịch vụ web RESTful PHP là gì?

Dịch vụ web RESTful về cơ bản là Dịch vụ web dựa trên kiến ​​trúc REST . Trong Kiến trúc REST, mọi thứ đều là tài nguyên. Các dịch vụ web RESTful có trọng lượng nhẹ, khả năng mở rộng và bảo trì cao và thường được sử dụng để tạo API cho các ứng dụng dựa trên web.