API cơ sở dữ liệu PHP

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

API cơ sở dữ liệu PHP

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ô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 kiế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

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ô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;		
	}
}
?>
70

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

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;		
	}
}
?>
73

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;		
	}
}
?>
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;
	}	
}
?>
4

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.

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 MySQL

vendor/
.env
0

Chú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ô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;		
	}
}
?>
70

vendor/
.env
3

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

vendor/
.env
5

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

mobiles = $dbcontroller->executeSelectQuery($query);
		return $this->mobiles;
	}	
}
?>
43

vendor/
.env
7

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 (bản đầy đủ)

composer install
0

Hã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 tra

mobiles = $dbcontroller->executeSelectQuery($query);
		return $this->mobiles;
	}	
}
?>
45

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

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ười

vendor/
.env
02

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

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
05

composer install
5

vendor/
.env
04

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

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ợ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

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ạn

composer install
9

Tê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
34

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ế
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;		
	}
}
?>
70

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

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 định

Thê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;		
	}
}
?>
70

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

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ạ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)

vendor/
.env
05 (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)

vendor/
.env
57

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

vendor/
.env
58 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

  • 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?

Làm cách nào để lấy dữ liệu từ cơ sở dữ liệu bằng API trong PHP?

php // Bao gồm các lớp Yêu cầu và Phản hồi $url = 'https. //api. exoclick. com/v2/đăng nhập';

Bạn có thể viết API bằng PHP không?

Có nhiều framework tuyệt vời có thể giúp bạn xây dựng API REST 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.

API PHP là gì?

PHP là ngôn ngữ kịch bản nhúng HTML phía máy chủ có thể được sử dụng để tạo các trang Web động . Nó có sẵn cho hầu hết các hệ điều hành và máy chủ Web và có thể truy cập hầu hết các cơ sở dữ liệu phổ biến, bao gồm cả MySQL.

API có thể kết nối với cơ sở dữ liệu không?

Mỗi tổ chức cung cấp dịch vụ trên nhiều hệ điều hành như ios, android, được tích hợp trên một cơ sở dữ liệu duy nhất. Do đó, họ cũng sử dụng API để tìm nạp dữ liệu từ cơ sở dữ liệu cho nhiều ứng dụng .