Tôi có hai trang web khác nhau [hai tên miền khác nhau] sử dụng laravel. Một trong số chúng [mà tôi sẽ gọi ở đây là api. com] cung cấp một api với các tuyến khác nhau và thực sự nằm trên một máy chủ cục bộ [111. 111. 1. 111]
tuyến đường/api. php
Route::prefix['news']->group[function [] {
Route::get['', [ApiController::class, 'newsIndex']];
Route::get['{id}', [ApiController::class, 'newsShow']];
}];
ApiController
public function newsIndex[]
{
$news = News::orderByDesc['ordre']
->where['site_destination', 'like', '%other%']
->where['statut', '=', 1]
->get[];
return response[]->json[$news];
}
public function newsShow[$id]
{
$news = News::findOrfail[$id];
return response[]->json[$news];
}
Tôi phải gọi các API này từ trang web thứ hai của mình [tôi sẽ gọi ở đây theo yêu cầu. com]. Tôi muốn triển khai cái này trực tuyến [máy chủ hành tinh]. Tôi triển khai thành công nhưng trang của tôi nơi tôi đã gọi API từ api. com không hoạt động. trả lại lỗi 500
Vào bộ điều khiển của tôi theo yêu cầu. com
public function index[]
{
$newsListFromApi = json_decode[file_get_contents["//111.111.1.111/api/news"]];
$newsFirstPictureList = [];
foreach [$newsListFromApi as $key => $value] {
$newsFirstPictureList[$value->id] = json_decode[file_get_contents["//111.111.1.111/api/news/" . $value->id . "/firstPicture"]];
}
return View::make['client.news.index', [
'newsListFromApi' => $newsListFromApi,
'newsFirstPictureList' => $newsFirstPictureList,
]];
}
public function show[$newsId]
{
$news = json_decode[file_get_contents["//111.111.111/api/news/" . $newsId]];
$newsDocs = json_decode[file_get_contents["//111.111.1.111/api/news/" . $newsId . "/docs"]];
// dump[$newsDocs];
return View::make['client.news.show', [
'news' => $news,
'newsDocs' => $newsDocs,
]];
}
Nếu yêu cầu. com đang ở trên localhost [chế độ sản xuất hoặc phát triển] nó hoạt động tốt. Tôi chỉ có thông báo cảnh báo trong bảng điều khiển về nội dung hỗn hợp mà tôi biết. Nhưng nếu tôi triển khai yêu cầu. com Tôi bị lỗi 500
Trên nhật ký tôi có mục này
*[2022-06-13 13:55:03] production.ERROR: file_get_contents[//111.111.1.111/api/news]: failed to open stream: Connection timed out {"userId":x,"email":"xx","exception":"[object] [ErrorException[code: 0]: file_get_contents[//111.111.1.111/api/news]: failed to open stream: Connection timed out at /home/xx/laravel/releases/20220613-120400/app/Http/Controllers/Client/NewsController.php:12]
[stacktrace]
api. com và yêu cầu. com api không nằm trên cùng một máy chủ khi phát triển
Bạn có nghĩ rằng nó có thể được gây ra bởi lỗi nội dung hỗn hợp?
Laravel chắc chắn đã cải thiện trải nghiệm của tôi với PHP và dễ dàng thử nghiệm với nó đã củng cố mối quan hệ của tôi đối với các khung công tác. Nó không hoàn hảo, nhưng nó đủ linh hoạt để cho phép bạn giải quyết các vấn đề của nó- blog công nghệ
- Sự phát triển
Vinh Phạm
811
23-04-2018
API RESTful là một dạng tiêu chuẩn được sử dụng trong thiết kế API cho ứng dụng web để giúp quản lý tài nguyên một cách dễ dàng nhất.
Trên trang web, điều này thường được thực hiện thông qua việc sử dụng URI RESTful. Để xây dựng một Webservice mình sẽ sử dụng ví dụ dưới đây dùng để lấy toàn bộ công thức làm bánh
công thức nấu ăn. com/api/v1/công thức/bánh
API là từ viết tắt của Giao diện lập trình ứng dụng
Với API chúng ta sẽ xây dựng ở đây sẽ bao gồm hai lớp. Một lớp hiển thị đối tượng [Lớp trừu tượng trong PHP] sẽ xử lý các phân tích của các URI và trả lại phản hồi, và một công cụ lớp con có thể chứa các điểm cuối [điểm cuối] cho API. Bằng cách này, chúng ta có một lớp vật liệu có thể tái sử dụng và có thể trở thành nền tảng của bất kỳ API RESTful nào khác
Việc đầu tiên chúng ta sẽ tạo ra 1 tệp. htaccess with after content
Bây giờ chúng ta sẽ tạo 1 lớp Abstract
Như đã đề cập trước đó, lớp này sẽ đóng vai trò trò chơi như một lớp bao phủ cho tất cả các điểm cuối tùy chỉnh thứ mà API sẽ sử dụng. Nó sẽ nhận yêu cầu từ URI, xác định phương thức HTTP [GET, POST, PUT, DELETE] và cài đặt nhanh dữ liệu được cung cấp trong tiêu đề hoặc trong URI
Khi đã hoàn thành, Lớp đối tượng sẽ đưa các thông tin yêu cầu vào một phương thức trong lớp cụ thể để thực hiện công việc. Sau đó, lớp này sẽ xử lý và trả về phản hồi HTTP cho khách hàng
Trước hết chúng ta sẽ khai báo lớp, thuộc tính và hàm tạo
API lớp trừu tượng
{
/**
* Tài sản. phương pháp
* Phương thức HTTP mà yêu cầu này được thực hiện, GET, POST, PUT hoặc DELETE
*/
phương thức $ được bảo vệ = '';
/**
* Tài sản. điểm cuối
* Mô hình được yêu cầu trong URI. ví dụ. /các tập tin
*/
được bảo vệ $endpoint = '';
/**
* Tài sản. động từ
* Một bộ mô tả bổ sung tùy chọn về điểm cuối, được sử dụng cho những thứ có thể
* không được xử lý bằng các phương pháp cơ bản. ví dụ. /tệp/tiến trình
*/
được bảo vệ $verb = '';
/**
* Tài sản. tranh luận
* Bất kỳ thành phần URI bổ sung nào sau điểm cuối và động từ đã bị xóa, trong
* case, an integer ID for the resource. eg: ////
* or //
*/
được bảo vệ $args = Array[];
/**
* Tài sản. tập tin
* Lưu trữ đầu vào của yêu cầu PUT
*/
tệp $ được bảo vệ = Null;
/**
* Người xây dựng. __xây dựng
* Cho phép CORS, lắp ráp và xử lý trước dữ liệu
*/
hàm công khai __construct[$request] {
tiêu đề ["Kiểm soát truy cập-Cho phép-Xuất xứ. *"];
tiêu đề ["Kiểm soát truy cập-Cho phép-Phương thức. *"];
tiêu đề ["Loại nội dung. ứng dụng/json"];
$this->args = phát nổ['/', rtrim[$request, '/']];
$this->endpoint = array_shift[$this->args];
nếu [array_key_exists[0, $this->args] &&. is_numeric[$this->args[0]]] {
$this->verb = array_shift[$this->args];
}
$this->method = $_SERVER['REQUEST_METHOD'];
if [$this->method == 'POST' && array_key_exists['HTTP_X_HTTP_METHOD', $_SERVER]] {
if [$_SERVER['HTTP_X_HTTP_METHOD'] == 'XÓA'] {
$this->method = 'XÓA';
} khác nếu [$_SERVER['HTTP_X_HTTP_METHOD'] == 'PUT'] {
$this->method = 'PUT';
} khác {
ném Ngoại lệ mới ["Tiêu đề không mong muốn"];
}
}
switch[$this->method] {
trường hợp 'XÓA'
trường hợp 'POST'
$this->request = $this->_cleanInputs[$_POST];
phá vỡ;
trường hợp 'NHẬN'
$this->request = $this->_cleanInputs[$_GET];
phá vỡ;
trường hợp 'PUT'
$this->request = $this->_cleanInputs[$_GET];
$this->file = file_get_contents["php. //đầu vào"];
phá vỡ;
mặc định
$this->_response['Phương thức không hợp lệ', 405];
phá vỡ;
}
}
}
Khi khai báo trên, chúng tôi trả về các thông tin tiêu đề như. Access-Control-Allow-Origin [tiêu đề chỉ định miền được phép truy cập], Access-Control-Allow-Methods [xác định phương thức được phép truy cập], Content-Type [kiểu dữ liệu, ở đây chúng ta trả về
Chúng ta quan tâm đến hàm processAPI[]. Công việc của nó là để xác định xem các phương thức nào của lớp được thực thi khi nhận được yêu cầu từ phía khách hàng. Nếu có, nó sẽ gọi hàm được yêu cầu, nếu không sẽ trả về phản hồi 404. Đó là tất cả những gì cho lớp vật chất. Bây giờ, chúng ta sẽ làm một lớp Bê tông
Ở trên có 2 lớp APIKey và Người dùng mình không đề cập đến trong bài viết này nhưng nó sẽ được sử dụng cho ứng dụng API với không gian tên là Mô hình, sẽ thực hiện các chức năng về khóa API và dữ liệu người dùng
Đơn giản là vậy, với mỗi điểm cuối bạn muốn trong API, bạn có thể thêm giống như lớp MyAPI này để phù hợp với yêu cầu
Để thực thi các API, chúng ta cần phải tạo ra các tệp PHP trong tệp. htaccess mình đã cấu hình. Trong ví dụ này mình đặt tên api cho nó. php
Nếu bạn truy cập vào địa chỉ /api/v1/example [nếu có dữ liệu Người dùng và Mã thông báo cần thiết], bạn sẽ thấy kết quả
Các bạn hãy tìm hiểu tiếp nhé. Cảm ơn các bạn đã theo dõi
BizFly Cloud là nhà cung cấp dịch vụ điện toán đám mây đám mây với chi phí thấp, được vận hành bởi VCCorp.
BizFly Cloud là một trong 4 doanh nghiệp nòng cốt trong "Chiến dịch kết thúc chuyển đổi số bằng công nghệ điện toán đám mây Việt Nam" của Bộ TT&TT;