Cuộc gọi api php

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("http://111.111.1.111/api/news"));
        $newsFirstPictureList = [];
        foreach ($newsListFromApi as $key => $value) {
            $newsFirstPictureList[$value->id] = json_decode(file_get_contents("http://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("http://111.111.111/api/news/" . $newsId));
        $newsDocs = json_decode(file_get_contents("http://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(http://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(http://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

Xây dựng Webservice với RESTful API trong PHP

Vinh Phạm

811

23-04-2018

Cuộc gọi api php

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

Cuộc gọi api php

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

Cuộc gọi api php

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ề

Cuộc gọi api php

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

Cuộc gọi api php

Ở 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

Cuộc gọi api 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;