PHP REST API được sao lưu bằng cơ sở dữ liệu MySQL là một sơ đồ rất phổ biến của ứng dụng di động Doanh nghiệp. Khi kịch bản yêu cầu dữ liệu được lưu trữ tập trung thì nên sử dụng kiến trúc này. Mặt khác, cơ sở dữ liệu cục bộ trong điện thoại di động có thể được sử dụng để lưu trữ và truy xuất thông tin
Trong hướng dẫn này, chúng tôi đang tạo một dịch vụ PHP RESTful để đọc dữ liệu từ bảng cơ sở dữ liệu [MySQL]. Ngoài ra, tôi đang cung cấp mã dự án Android mẫu để gọi dịch vụ RESTful này
Trong hướng dẫn trước, chúng ta đã thấy những kiến thức cơ bản về các dịch vụ RESTful của PHP. Tôi thực sự khuyên bạn nên xem qua nó trước khi tiếp tục hướng dẫn này
Trong ví dụ này, chúng tôi đang gọi PHP REST API từ một ứng dụng Android. Ở phía máy chủ, dịch vụ API đọc dữ liệu từ cơ sở dữ liệu và gửi phản hồi ở định dạng JSON. Sau khi nhận được phản hồi, ứng dụng Android sẽ hiển thị hàng mục trong ListView bằng cách phân tích cú pháp dữ liệu JSON
Nếu bạn muốn xem cách xử lý dữ liệu JSON bằng PHP với các ghi chú và ví dụ chi tiết, thì bài viết được liên kết sẽ là một hướng dẫn hoàn hảo về điều này
PHP REST API đọc bản ghi MySQL
Chúng tôi có một bảng cơ sở dữ liệu chứa danh sách tên kiểu điện thoại di động. API REST của chúng tôi tìm nạp danh sách tên di động từ cơ sở dữ liệu và gửi phản hồi dưới dạng JSON. API REST này chứa ba phần. Đây là, bộ điều khiển REST, lớp dịch vụ và DAO
RestController. php
Cuộc gọi REST dừng trên bộ điều khiển này. Nó gọi dịch vụ để chuẩn bị phản hồi
getAllMobiles[];
break;
case "" :
//404 - not found;
break;
}
?>
Điện Thoại Di Động. php
Lớp dịch vụ gọi hàm DAO để đọc dữ liệu từ bảng cơ sở dữ liệu. Vì ứng dụng của chúng tôi yêu cầu dữ liệu kiểu JSON, nên lớp dịch vụ sẽ chuẩn bị phản hồi ở định dạng JSON
getAllMobile[];
if[empty[$rawData]] {
$statusCode = 404;
$rawData = array['error' => 'No mobiles found!'];
} else {
$statusCode = 200;
}
$requestContentType = 'application/json';//$_POST['HTTP_ACCEPT'];
$this ->setHttpHeaders[$requestContentType, $statusCode];
$result["output"] = $rawData;
if[strpos[$requestContentType,'application/json'] !== false]{
$response = $this->encodeJson[$result];
echo $response;
}
}
public function encodeJson[$responseData] {
$jsonResponse = json_encode[$responseData];
return $jsonResponse;
}
}
?>
di động. php
mobiles = $dbcontroller->executeSelectQuery[$query];
return $this->mobiles;
}
}
?>
Ứng dụng Android – Truy cập API PHP REST
Trong ví dụ này, chúng tôi đang tạo một ứng dụng Android đơn giản để truy cập dữ liệu MySQL bằng API REST trong PHP. Chúng tôi đang có một phần tử ListView trong MainActivity
Chúng tôi đang tạo Bộ điều hợp ListView để thêm danh sách các mục được trả về dưới dạng phản hồi API. Sau đó, chúng tôi đặt bộ điều hợp này thành phần tử ListView để hiển thị các hàng dữ liệu MySQL
Khi khởi chạy MainActivity, chúng tôi gọi AsyncTask để truy cập PHP MySQL REST API. Chúng tôi sử dụng lớp “HTTPConnectionRequest” để đặt thông số và gửi yêu cầu tới API. Đoạn mã sau hiển thị lớp MainActivity
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
- Đị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 PHP REST của bạn bằng OAuth 2. 0
- Thêm xác thực vào PHP REST API của bạn
- 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
- 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
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ôiOKTAAUDIENCE=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 kiếm các lớp PHP trong thư mục
vendor/
.env
9Chú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ỏ quavendor/
.env
Tiếp theo, chúng tôi sẽ tạo một tệp
getAllMobile[];
if[empty[$rawData]] {
$statusCode = 404;
$rawData = array['error' => 'No mobiles found!'];
} else {
$statusCode = 200;
}
$requestContentType = 'application/json';//$_POST['HTTP_ACCEPT'];
$this ->setHttpHeaders[$requestContentType, $statusCode];
$result["output"] = $rawData;
if[strpos[$requestContentType,'application/json'] !== false]{
$response = $this->encodeJson[$result];
echo $response;
}
}
public function encodeJson[$responseData] {
$jsonResponse = json_encode[$responseData];
return $jsonResponse;
}
}
?>
70 cho các biến xác thực Okta của chúng tôigetAllMobile[];
if[empty[$rawData]] {
$statusCode = 404;
$rawData = array['error' => 'No mobiles found!'];
} else {
$statusCode = 200;
}
$requestContentType = 'application/json';//$_POST['HTTP_ACCEPT'];
$this ->setHttpHeaders[$requestContentType, $statusCode];
$result["output"] = $rawData;
if[strpos[$requestContentType,'application/json'] !== false]{
$response = $this->encodeJson[$result];
echo $response;
}
}
public function encodeJson[$responseData] {
$jsonResponse = json_encode[$responseData];
return $jsonResponse;
}
}
?>
70OKTAAUDIENCE=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
getAllMobile[];
if[empty[$rawData]] {
$statusCode = 404;
$rawData = array['error' => 'No mobiles found!'];
} else {
$statusCode = 200;
}
$requestContentType = 'application/json';//$_POST['HTTP_ACCEPT'];
$this ->setHttpHeaders[$requestContentType, $statusCode];
$result["output"] = $rawData;
if[strpos[$requestContentType,'application/json'] !== false]{
$response = $this->encodeJson[$result];
echo $response;
}
}
public function encodeJson[$responseData] {
$jsonResponse = json_encode[$responseData];
return $jsonResponse;
}
}
?>
73 để 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]getAllMobile[];
if[empty[$rawData]] {
$statusCode = 404;
$rawData = array['error' => 'No mobiles found!'];
} else {
$statusCode = 200;
}
$requestContentType = 'application/json';//$_POST['HTTP_ACCEPT'];
$this ->setHttpHeaders[$requestContentType, $statusCode];
$result["output"] = $rawData;
if[strpos[$requestContentType,'application/json'] !== false]{
$response = $this->encodeJson[$result];
echo $response;
}
}
public function encodeJson[$responseData] {
$jsonResponse = json_encode[$responseData];
return $jsonResponse;
}
}
?>
73getAllMobile[];
if[empty[$rawData]] {
$statusCode = 404;
$rawData = array['error' => 'No mobiles found!'];
} else {
$statusCode = 200;
}
$requestContentType = 'application/json';//$_POST['HTTP_ACCEPT'];
$this ->setHttpHeaders[$requestContentType, $statusCode];
$result["output"] = $rawData;
if[strpos[$requestContentType,'application/json'] !== false]{
$response = $this->encodeJson[$result];
echo $response;
}
}
public function encodeJson[$responseData] {
$jsonResponse = json_encode[$responseData];
return $jsonResponse;
}
}
?>
7Đị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
mobiles = $dbcontroller->executeSelectQuery[$query];
return $this->mobiles;
}
}
?>
4API 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.
getAllMobile[];
if[empty[$rawData]] {
$statusCode = 404;
$rawData = array['error' => 'No mobiles found!'];
} else {
$statusCode = 200;
}
$requestContentType = 'application/json';//$_POST['HTTP_ACCEPT'];
$this ->setHttpHeaders[$requestContentType, $statusCode];
$result["output"] = $rawData;
if[strpos[$requestContentType,'application/json'] !== false]{
$response = $this->encodeJson[$result];
echo $response;
}
}
public function encodeJson[$responseData] {
$jsonResponse = json_encode[$responseData];
return $jsonResponse;
}
}
?>
75, getAllMobile[];
if[empty[$rawData]] {
$statusCode = 404;
$rawData = array['error' => 'No mobiles found!'];
} else {
$statusCode = 200;
}
$requestContentType = 'application/json';//$_POST['HTTP_ACCEPT'];
$this ->setHttpHeaders[$requestContentType, $statusCode];
$result["output"] = $rawData;
if[strpos[$requestContentType,'application/json'] !== false]{
$response = $this->encodeJson[$result];
echo $response;
}
}
public function encodeJson[$responseData] {
$jsonResponse = json_encode[$responseData];
return $jsonResponse;
}
}
?>
76, getAllMobile[];
if[empty[$rawData]] {
$statusCode = 404;
$rawData = array['error' => 'No mobiles found!'];
} else {
$statusCode = 200;
}
$requestContentType = 'application/json';//$_POST['HTTP_ACCEPT'];
$this ->setHttpHeaders[$requestContentType, $statusCode];
$result["output"] = $rawData;
if[strpos[$requestContentType,'application/json'] !== false]{
$response = $this->encodeJson[$result];
echo $response;
}
}
public function encodeJson[$responseData] {
$jsonResponse = json_encode[$responseData];
return $jsonResponse;
}
}
?>
77, getAllMobile[];
if[empty[$rawData]] {
$statusCode = 404;
$rawData = array['error' => 'No mobiles found!'];
} else {
$statusCode = 200;
}
$requestContentType = 'application/json';//$_POST['HTTP_ACCEPT'];
$this ->setHttpHeaders[$requestContentType, $statusCode];
$result["output"] = $rawData;
if[strpos[$requestContentType,'application/json'] !== false]{
$response = $this->encodeJson[$result];
echo $response;
}
}
public function encodeJson[$responseData] {
$jsonResponse = json_encode[$responseData];
return $jsonResponse;
}
}
?>
78, getAllMobile[];
if[empty[$rawData]] {
$statusCode = 404;
$rawData = array['error' => 'No mobiles found!'];
} else {
$statusCode = 200;
}
$requestContentType = 'application/json';//$_POST['HTTP_ACCEPT'];
$this ->setHttpHeaders[$requestContentType, $statusCode];
$result["output"] = $rawData;
if[strpos[$requestContentType,'application/json'] !== false]{
$response = $this->encodeJson[$result];
echo $response;
}
}
public function encodeJson[$responseData] {
$jsonResponse = json_encode[$responseData];
return $jsonResponse;
}
}
?>
79. 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 MySQLvendor/
.env
0Chúng tôi sẽ thêm các biến kết nối cơ sở dữ liệu vào tệp
getAllMobile[];
if[empty[$rawData]] {
$statusCode = 404;
$rawData = array['error' => 'No mobiles found!'];
} else {
$statusCode = 200;
}
$requestContentType = 'application/json';//$_POST['HTTP_ACCEPT'];
$this ->setHttpHeaders[$requestContentType, $statusCode];
$result["output"] = $rawData;
if[strpos[$requestContentType,'application/json'] !== false]{
$response = $this->encodeJson[$result];
echo $response;
}
}
public function encodeJson[$responseData] {
$jsonResponse = json_encode[$responseData];
return $jsonResponse;
}
}
?>
70 của chúng tôigetAllMobile[];
if[empty[$rawData]] {
$statusCode = 404;
$rawData = array['error' => 'No mobiles found!'];
} else {
$statusCode = 200;
}
$requestContentType = 'application/json';//$_POST['HTTP_ACCEPT'];
$this ->setHttpHeaders[$requestContentType, $statusCode];
$result["output"] = $rawData;
if[strpos[$requestContentType,'application/json'] !== false]{
$response = $this->encodeJson[$result];
echo $response;
}
}
public function encodeJson[$responseData] {
$jsonResponse = json_encode[$responseData];
return $jsonResponse;
}
}
?>
70vendor/
.env
3Sau đó, 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=
1vendor/
.env
5Bâ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
mobiles = $dbcontroller->executeSelectQuery[$query];
return $this->mobiles;
}
}
?>
43vendor/
.env
7getAllMobile[];
if[empty[$rawData]] {
$statusCode = 404;
$rawData = array['error' => 'No mobiles found!'];
} else {
$statusCode = 200;
}
$requestContentType = 'application/json';//$_POST['HTTP_ACCEPT'];
$this ->setHttpHeaders[$requestContentType, $statusCode];
$result["output"] = $rawData;
if[strpos[$requestContentType,'application/json'] !== false]{
$response = $this->encodeJson[$result];
echo $response;
}
}
public function encodeJson[$responseData] {
$jsonResponse = json_encode[$responseData];
return $jsonResponse;
}
}
?>
73 [bản đầy đủ]composer install
0Hãy tạo một tệp
mobiles = $dbcontroller->executeSelectQuery[$query];
return $this->mobiles;
}
}
?>
45 để tạo bảng mobiles = $dbcontroller->executeSelectQuery[$query];
return $this->mobiles;
}
}
?>
46 của chúng ta và chèn một số bản ghi vào đó để kiểm tramobiles = $dbcontroller->executeSelectQuery[$query];
return $this->mobiles;
}
}
?>
45composer install
1Cơ 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
mobiles = $dbcontroller->executeSelectQuery[$query];
return $this->mobiles;
}
}
?>
48 vào MySQL rồi chạy mobiles = $dbcontroller->executeSelectQuery[$query];
return $this->mobiles;
}
}
?>
49 [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
mobiles = $dbcontroller->executeSelectQuery[$query];
return $this->mobiles;
}
}
?>
46 [như mẫu cổ điển sẽ yêu cầu] và chỉ đi với lớp vendor/
.env
01. 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ườivendor/
.env
02composer install
2Rõ 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
3Triể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
4Chúng tôi sẽ tạo một tệp
vendor/
.env
03 để đó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 vendor/
.env
04 để 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]vendor/
.env
05composer install
5vendor/
.env
04composer install
6Bạ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
7Sau đó kết nối với
vendor/
.env
07 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 vendor/
.env
08, 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
vendor/
.env
09 để đăng ký tài khoản mới. Nếu bạn đã có tài khoản, hãy chạy vendor/
.env
30. Sau đó, chạy vendor/
.env
31. Chọn tên ứng dụng mặc định hoặc thay đổi tên khi bạn thấy phù hợpOkta 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
8Chạy
vendor/
.env
32 [hoặc vendor/
.env
33 trên Windows] để xem nhà phát hành và thông tin đăng nhập cho ứng dụng của bạncomposer install
9Tên miền Okta của bạn là phần đầu tiên của tổ chức phát hành của bạn, trước
vendor/
.env
34GHI 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ế vendor/
.env
36 và vendor/
.env
37 bằng các giá trị từ trang này]Thêm vào
getAllMobile[];
if[empty[$rawData]] {
$statusCode = 404;
$rawData = array['error' => 'No mobiles found!'];
} else {
$statusCode = 200;
}
$requestContentType = 'application/json';//$_POST['HTTP_ACCEPT'];
$this ->setHttpHeaders[$requestContentType, $statusCode];
$result["output"] = $rawData;
if[strpos[$requestContentType,'application/json'] !== false]{
$response = $this->encodeJson[$result];
echo $response;
}
}
public function encodeJson[$responseData] {
$jsonResponse = json_encode[$responseData];
return $jsonResponse;
}
}
?>
70vendor/
.env
0Thêm các khóa và giá trị này vào
OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
1vendor/
.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
vendor/
.env
30, 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à vendor/
.env
51 và chọn Đặt làm phạm vi mặc địnhThêm phạm vi vào
getAllMobile[];
if[empty[$rawData]] {
$statusCode = 404;
$rawData = array['error' => 'No mobiles found!'];
} else {
$statusCode = 200;
}
$requestContentType = 'application/json';//$_POST['HTTP_ACCEPT'];
$this ->setHttpHeaders[$requestContentType, $statusCode];
$result["output"] = $rawData;
if[strpos[$requestContentType,'application/json'] !== false]{
$response = $this->encodeJson[$result];
echo $response;
}
}
public function encodeJson[$responseData] {
$jsonResponse = json_encode[$responseData];
return $jsonResponse;
}
}
?>
70vendor/
.env
2và khóa có giá trị là
OKTAAUDIENCE=api://default
OKTAISSUER=
SCOPE=
OKTACLIENTID=
OKTASECRET=
1vendor/
.env
3Thê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
vendor/
.env
54] và thư viện tuân thủ PSR-7 [chúng tôi sẽ sử dụng vendor/
.env
55]. Chúng tôi sẽ cài đặt mọi thứ thông qua nhà soạn nhạcvendor/
.env
4Bâ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]
vendor/
.env
05 [bản full cho rõ]vendor/
.env
5Xâ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]
vendor/
.env
57vendor/
.env
6Bạn có thể chạy ứng dụng từ dòng lệnh bằng cách vào thư mục
vendor/
.env
58 và chạyvendor/
.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
- Hướng dẫn khởi động nhanh Vue/PHP của chúng tô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?