Tải xuống mã mẫu PHP REST API

Phần 1 của loạt bài gồm ba phần giúp bạn tìm hiểu các dịch vụ web RESTful bằng PHP. Các hướng dẫn này sẽ toàn diện, bằng cách làm theo chúng, bạn có thể dễ dàng xây dựng các dịch vụ web của riêng mình và sử dụng các dịch vụ bên ngoài

Trong hướng dẫn này, chúng ta sẽ xem cách tạo một dịch vụ web PHP RESTful mà không cần sử dụng bất kỳ khuôn khổ nào. Hầu hết thời gian tôi thích viết mã tùy chỉnh mà không phụ thuộc vào khung vì cách tiếp cận này có rất nhiều lợi thế. Về cơ bản, điều này sẽ giúp bạn tìm hiểu sâu hơn các khái niệm và bạn có thể giữ mọi thứ bóng bẩy và hiệu quả

REST hoặc Chuyển giao trạng thái đại diện là một trong những kiểu kiến ​​trúc phổ biến được sử dụng để phát triển các dịch vụ web. Kiểu kiến ​​trúc này chứa các ràng buộc hoặc quy tắc để thiết kế các dịch vụ web có thể được truy cập từ ứng dụng bên ngoài hoặc ứng dụng web

Mục tiêu của ví dụ dịch vụ web PHP RESTful này

Mục tiêu là xây dựng một dịch vụ web RESTful trong PHP để cung cấp dữ liệu tài nguyên dựa trên yêu cầu với cuộc gọi mạng của các máy khách bên ngoài. Ngoài ra, danh sách các bước sau đây được triển khai trong khi tùy chỉnh ví dụ này mà không phụ thuộc vào bất kỳ khuôn khổ nào

  • Tạo URI yêu cầu với các mẫu tuân theo nguyên tắc REST
  • Làm cho dịch vụ RESTful có khả năng đáp ứng các yêu cầu ở định dạng JSON, XML và HTML
  • Minh họa việc sử dụng mã Trạng thái HTTP dựa trên các tình huống khác nhau
  • Chứng minh việc sử dụng Tiêu đề yêu cầu
  • Kiểm tra dịch vụ web RESTful bằng ứng dụng khách REST

Làm thế nào nó được thực hiện?

Một mảng tên thương hiệu di động là dữ liệu tài nguyên sẽ được nhắm mục tiêu bởi các ứng dụng khách REST. Tôi có tài nguyên này trong một lớp miền của ví dụ PHP RESTful này

Để truy cập những dữ liệu này thông qua dịch vụ web này, khách hàng sẽ gửi yêu cầu bằng cách đặt URI, tham số với phương thức đã chọn và nhiều thông tin khác

Trình xử lý tài nguyên của dịch vụ web sẽ chuẩn bị phản hồi ở định dạng JSON, XML hoặc HTML dựa trên yêu cầu. Sau đó, phản hồi sẽ được gửi đến khách hàng

Trên Internet, tôi đã xem các hướng dẫn về dịch vụ web và hầu hết thời gian chúng đều dễ bị lỗi hoặc không đầy đủ. Tôi đã thử nghiệm các dịch vụ RESTful đó bằng ứng dụng khách REST và hầu hết chúng đều không thành công

Xem bản trình diễn

Bên trong là gì?

RESTful là gì?

REST là viết tắt của Chuyển giao trạng thái đại diện và nó là một kiểu kiến ​​trúc cho phép giao tiếp giữa các hệ thống. Thuật ngữ REST lần đầu tiên được đặt ra bởi Roy T. Fielding lấy bằng tiến sĩ. luận án

Khái niệm REST được xác định bởi các quy tắc, ràng buộc hoặc nguyên tắc nhất định. Hệ thống, ứng dụng, dịch vụ hoặc bất kỳ thứ gì đáp ứng các nguyên tắc REST này được gọi là RESTful

Các dịch vụ web tuân theo các nguyên tắc RESTful là các dịch vụ RESTful. URI được sử dụng để truy cập các dịch vụ RESTful để lấy tài nguyên

Trong bảng thuật ngữ RESTful, tài nguyên không là gì ngoài dữ liệu và chức năng. Vì vậy cuối cùng, chúng tôi sẽ gọi các dịch vụ web thông qua URI để truy cập các chức năng và từ đó lấy dữ liệu tài nguyên

Ràng buộc REST

Các ràng buộc sau xác định RESTality của một ứng dụng hoặc dịch vụ

  • Kiến trúc máy khách-máy chủ
  • không quốc tịch
  • Giao diện thống nhất
  • hệ thống lớp
  • Khả năng lưu trữ
  • Mã theo yêu cầu

Dịch vụ web RESTful so với dịch vụ web RPC

Bảng sau đây cho thấy sự so sánh giữa các dịch vụ web kiểu RESTful và RPC. So sánh này được thực hiện bởi các yếu tố như URI yêu cầu dịch vụ, phương thức yêu cầu, truyền dữ liệu, trình xử lý dịch vụ, v.v.

RESTful-StyleRPC-StyleRequest URIYêu cầu URI sẽ khác nhau dựa trên tài nguyên. Cùng một URI cho tất cả các tài nguyên. Các phương thức yêu cầuCác tham số yêu cầu dịch vụ có thể được gửi qua các phương thức yêu cầu GET, PUT và POST. Chỉ hỗ trợ phương thức POST. Các phương thức hoặc trình xử lý dịch vụCùng một phương thức cho tất cả các tài nguyên. Các phương thức và tham số được đăng theo yêu cầu. Nhắm mục tiêu vàoYêu cầu dịch vụ sử dụng kiểu này nhắm mục tiêu tài nguyên. Mục tiêu là các phương pháp. Truyền dữ liệu phản hồiQua HTTPĐược bao bọc bằng các phương thức và tham số được yêu cầu

Kiến trúc API dịch vụ web RESTful

Sơ đồ sau đây cho thấy kiến ​​trúc dịch vụ web RESTful. Trong sơ đồ này, luồng yêu cầu-phản hồi giữa máy khách-máy chủ được biểu diễn

Trong sơ đồ này, cơ sở dữ liệu được hiển thị dưới dạng tài nguyên. Dựa trên dịch vụ web, tài nguyên có thể là nguồn cấp dữ liệu XML, dữ liệu JSON được trích xuất từ ​​​​hệ thống tệp hoặc bất kỳ

Công dụng của API RESTful

API RESTful cung cấp các dịch vụ để truy cập tài nguyên từ các ứng dụng bên ngoài hoặc ứng dụng khách REST. Một số cách sử dụng chủ yếu của API RESTful được liệt kê bên dưới

  • Là một giao diện có hỗ trợ đa nền tảng, được sử dụng để truy cập tài nguyên từ các ứng dụng bên ngoài được mã hóa bằng nhiều ngôn ngữ lập trình khác nhau như PHP, JAVA, Android, v.v.
  • REST là kiểu kiến ​​trúc đơn giản để truyền dữ liệu qua HTTP
  • API REST là nhà cung cấp tài nguyên phù hợp nhất cho giao diện ứng dụng dựa trên AJAX yêu cầu dữ liệu để cập nhật giao diện người dùng mà không cần tải lại trang
  • Bằng cách đáp ứng nhiều ràng buộc REST hơn, các ứng dụng hoặc dịch vụ web có thể hỗ trợ nhiều loại máy khách

Ví dụ dịch vụ web PHP RESTful

Trong ví dụ dịch vụ web PHP RESTful, lớp miền sau chứa mảng dữ liệu tài nguyên và trình xử lý dịch vụ. Các trình xử lý này được gọi dựa trên yêu cầu được gửi bởi ứng dụng khách REST hoặc ứng dụng bên ngoài

Trong phần tiếp theo, chúng ta có thể xem tất cả các cấu trúc tệp và mục đích của từng tệp trong ví dụ này

 'Apple iPhone 6S',
        2 => 'Samsung Galaxy S6',
        3 => 'Apple iPhone 6S Plus',
        4 => 'LG G4',
        5 => 'Samsung Galaxy S6 edge',
        6 => 'OnePlus 2'
    ];

    /*
     * you should hookup the DAO here
     */
    public function getAllMobile[]
    {
        return $this->mobiles;
    }

    public function getMobile[$id]
    {
        $mobile = array[
            $id => [$this->mobiles[$id]] ? $this->mobiles[$id] : $this->mobiles[1]
        ];
        return $mobile;
    }
}
?>

Cấu trúc tệp của dịch vụ ví dụ RESTful

Cấu trúc tệp bên dưới cho thấy sự đơn giản của việc tạo ví dụ về dịch vụ web RESTful

Như đã thảo luận ở trên Di động. php là lớp miền có mảng tài nguyên và trình xử lý để lấy tài nguyên

Các. htaccess được sử dụng để ánh xạ URI yêu cầu tới điểm cuối dịch vụ REST

Trong các phần sau, chúng ta sẽ xem cách URI được ánh xạ và cách trình xử lý dịch vụ được gọi để lấy dữ liệu tài nguyên từ miền. – URI RFC 3986

Ánh xạ URI dịch vụ RESTful

Mọi tài nguyên được xác định thông qua URI [Mã định danh tài nguyên thống nhất]

Mã định danh tài nguyên thống nhất [URI] là một chuỗi ký tự nhỏ gọn xác định tài nguyên vật lý hoặc trừu tượng

RestController. php được hiển thị trong cấu trúc tệp ở trên là điểm cuối PHP mà yêu cầu sẽ được chuyển tiếp

Tôi cung cấp hai URI để truy cập dịch vụ web này từ các ứng dụng bên ngoài hoặc ứng dụng khách REST trong ví dụ này. Một URI sẽ được sử dụng để lấy mảng tên di động hoàn chỉnh ở định dạng JSON và một URI khác là lấy một tên di động cụ thể dựa trên nhận dạng được chuyển qua URI yêu cầu

URIMethodTypeDes mô tảhttp. //localhost/restexample/mobile/list/GETJSONĐể lấy danh sách tên thương hiệu di động trong một mảng JSON. http. //localhost/restexample/mobile/list/{id}/GETJSONĐể lấy một mảng dữ liệu di động duy nhất theo nhận dạng được truyền qua URL

Các URI sau được ánh xạ tới tệp thực thông qua. tập tin htaccess

URI để lấy danh sách tất cả các điện thoại di động

//localhost/restexample/mobile/list/

URI để nhận chi tiết của một thiết bị di động cụ thể bằng cách sử dụng id của nó

Trong URI bên dưới, số '2' là id của điện thoại di động. Lớp miền tài nguyên có thể lấy dữ liệu cụ thể với tham chiếu của tham số id này

//localhost/restexample/mobile/list/2/

Đoạn mã dưới đây hiển thị các quy tắc và ánh xạ URL đầy đủ được tạo cho ví dụ về dịch vụ web PHP RESTful này trong tệp .htaccess  của nó

# Turn rewrite engine on
Options +FollowSymlinks
RewriteEngine on

# map neat URL to internal URL
RewriteRule ^mobile/list/$   RestController.php?view=all [nc,qsa]
RewriteRule ^mobile/list/[[0-9]+]/$   RestController.php?view=single&id=$1 [nc,qsa]

Bộ điều khiển dịch vụ web RESTful

Trong tệp_______7, chúng tôi đang chuyển tiếp tất cả các yêu cầu tới RestController. tập tin php

Trong khi chuyển tiếp yêu cầu, các tham số được gửi để thực thi một phần bắt buộc của bộ điều khiển REST. Tham số này là khóa có tên 'view'

Giá trị của tham số chính có thể là “tất cả” hoặc “đơn” dựa trên URI yêu cầu

Sau đây là RestController. tệp php nhận yêu cầu và nhận tham số xem. Dựa trên giá trị tham số này, trường hợp điều khiển thích hợp sẽ được thực thi

Trong các trường hợp bộ điều khiển, yêu cầu được gửi đến các phương thức tương ứng được tạo trong lớp trình xử lý REST

getAllMobiles[];
        break;

    case "single":
        // to handle REST Url /mobile/show//
        $mobileRestHandler = new MobileRestHandler[];
        $mobileRestHandler->getMobile[$_GET["id"]];
        break;

    case "":
        // 404 - not found;
        break;
}
?>

Một lớp cơ sở RESTful đơn giản

Lớp sau có một số phương thức có thể được sử dụng phổ biến cho trình xử lý dịch vụ RESTful

Phương thức getHttpStatusMessage[] được sử dụng để lấy thông báo trạng thái HTTP để tạo phản hồi. Nó chứa mã trạng thái HTTP và mảng ánh xạ thông báo

Bằng cách nhận mã trạng thái, nó sẽ trả về thông báo phản hồi tiêu đề thích hợp. Nếu mã trạng thái không hợp lệ được chuyển đến chức năng này hoặc không tìm thấy mã như vậy trong mảng ánh xạ, thì "Lỗi máy chủ không hợp lệ" sẽ được trả về trong phản hồi

Các phương thức này có thể thường được sử dụng trong lớp cơ sở của các dịch vụ web PHP RESTful đơn giản

getHttpStatusMessage[$statusCode];

        header[$this->httpVersion . " " . $statusCode . " " . $statusMessage];
        header["Content-Type:" . $contentType];
    }

    public function getHttpStatusMessage[$statusCode]
    {
        $httpStatus = array[
            100 => 'Continue',
            101 => 'Switching Protocols',
            200 => 'OK',
            201 => 'Created',
            202 => 'Accepted',
            203 => 'Non-Authoritative Information',
            204 => 'No Content',
            205 => 'Reset Content',
            206 => 'Partial Content',
            300 => 'Multiple Choices',
            301 => 'Moved Permanently',
            302 => 'Found',
            303 => 'See Other',
            304 => 'Not Modified',
            305 => 'Use Proxy',
            306 => '[Unused]',
            307 => 'Temporary Redirect',
            400 => 'Bad Request',
            401 => 'Unauthorized',
            402 => 'Payment Required',
            403 => 'Forbidden',
            404 => 'Not Found',
            405 => 'Method Not Allowed',
            406 => 'Not Acceptable',
            407 => 'Proxy Authentication Required',
            408 => 'Request Timeout',
            409 => 'Conflict',
            410 => 'Gone',
            411 => 'Length Required',
            412 => 'Precondition Failed',
            413 => 'Request Entity Too Large',
            414 => 'Request-URI Too Long',
            415 => 'Unsupported Media Type',
            416 => 'Requested Range Not Satisfiable',
            417 => 'Expectation Failed',
            500 => 'Internal Server Error',
            501 => 'Not Implemented',
            502 => 'Bad Gateway',
            503 => 'Service Unavailable',
            504 => 'Gateway Timeout',
            505 => 'HTTP Version Not Supported'
        ];
        return [$httpStatus[$statusCode]] ? $httpStatus[$statusCode] : $httpStatus[500];
    }
}
?>

Trình xử lý dịch vụ web RESTful

Đây là lớp dịch vụ của ví dụ PHP này xử lý yêu cầu REST được gửi từ bộ điều khiển

Đầu tiên, chúng ta phải quyết định về định dạng phản hồi trong đó dữ liệu tài nguyên phải được chuẩn bị. Nó dựa trên các tham số tiêu đề yêu cầu

Trong tiêu đề yêu cầu, tham số “Chấp nhận” sẽ có thông số kỹ thuật về định dạng hoặc loại nội dung phản hồi

Giao thức ở đây là, khi yêu cầu được gửi đi, nó sẽ đặt tham số tiêu đề Yêu cầu là “Chấp nhận” và gửi đi. Các giá trị có thể giống như “application/json” hoặc “application/xml” hoặc “text/html”

Dựa trên các giá trị này, dữ liệu phản hồi sẽ sẵn sàng bằng cách gọi các phương thức thích hợp encodeJson[], encodeXML[], encodeHTML[] được hiển thị bên dưới

Sau đó, mã trạng thái phải được trả lại cho máy khách cùng với dữ liệu phản hồi. Khi thành công, mã trạng thái sẽ là 200

Tương tự, có sẵn các mã trạng thái khác nhau và chúng nên được sử dụng tương ứng để đặt tiêu đề phản hồi như chúng ta đã thảo luận trong phần trên

getAllMobile[];

        if [empty[$rawData]] {
            $statusCode = 404;
            $rawData = array[
                'error' => 'No mobiles found!'
            ];
        } else {
            $statusCode = 200;
        }

        $requestContentType = $_SERVER['HTTP_ACCEPT'];
        $this->setHttpHeaders[$requestContentType, $statusCode];

        if [strpos[$requestContentType, 'application/json'] !== false] {
            $response = $this->encodeJson[$rawData];
            echo $response;
        } else if [strpos[$requestContentType, 'text/html'] !== false] {
            $response = $this->encodeHtml[$rawData];
            echo $response;
        } else if [strpos[$requestContentType, 'application/xml'] !== false] {
            $response = $this->encodeXml[$rawData];
            echo $response;
        }
    }

    public function encodeHtml[$responseData]
    {
        $htmlResponse = "";
        foreach [$responseData as $key => $value] {
            $htmlResponse .= "";
        }
        $htmlResponse .= "" . $key . "" . $value . "";
        return $htmlResponse;
    }

    public function encodeJson[$responseData]
    {
        $jsonResponse = json_encode[$responseData];
        return $jsonResponse;
    }

    public function encodeXml[$responseData]
    {
        // creating object of SimpleXMLElement
        $xml = new SimpleXMLElement[''];
        foreach [$responseData as $key => $value] {
            $xml->addChild[$key, $value];
        }
        return $xml->asXML[];
    }

    public function getMobile[$id]
    {
        $mobile = new Mobile[];
        $rawData = $mobile->getMobile[$id];

        if [empty[$rawData]] {
            $statusCode = 404;
            $rawData = array[
                'error' => 'No mobiles found!'
            ];
        } else {
            $statusCode = 200;
        }

        $requestContentType = $_SERVER['HTTP_ACCEPT'];
        $this->setHttpHeaders[$requestContentType, $statusCode];

        if [strpos[$requestContentType, 'application/json'] !== false] {
            $response = $this->encodeJson[$rawData];
            echo $response;
        } else if [strpos[$requestContentType, 'text/html'] !== false] {
            $response = $this->encodeHtml[$rawData];
            echo $response;
        } else if [strpos[$requestContentType, 'application/xml'] !== false] {
            $response = $this->encodeXml[$rawData];
            echo $response;
        }
    }
}
?>

Máy khách dịch vụ web RESTful

Có nhiều ứng dụng khách REST độc lập khác nhau có sẵn trên thị trường. Các giao diện máy khách này được sử dụng để kiểm tra dịch vụ web RESTful

Tiện ích mở rộng Advanced Rest Client có thể được thêm vào Chrome được cài đặt trên máy của bạn

Chúng tôi cũng có thể viết ứng dụng khách tùy chỉnh của riêng mình để kiểm tra dịch vụ web RESTful

Tôi đã sử dụng ứng dụng khách REST của tiện ích mở rộng Google Chrome này để thử nghiệm ví dụ về dịch vụ web PHP RESTful này

Đầu ra dịch vụ web PHP RESTful

Ảnh chụp màn hình bên dưới cho thấy cách gọi dịch vụ web RESTful. Trong ảnh chụp màn hình này, các phần được khoanh tròn làm nổi bật URI yêu cầu, phương thức yêu cầu đã chọn, thông số Chấp nhận của tiêu đề và các chi tiết khác

Bằng cách nhấp vào nút gửi, phản hồi sẽ được trả về từ dịch vụ web PHP RESTful

Phản hồi XML

Tôi đặt ứng dụng/xml làm loại phản hồi. Vì vậy, dữ liệu tài nguyên kết quả được chuẩn bị ở định dạng được yêu cầu như trong phần phản hồi của ảnh chụp màn hình bên dưới

Phản hồi JSON của dịch vụ web RESTful PHP

Sự kết luận

Trong loạt bài hướng dẫn gồm ba phần này về các dịch vụ web RESTful sử dụng PHP, bạn sẽ tìm hiểu chi tiết về cách triển khai RESTful bằng cách sử dụng tài liệu toàn diện này. Phần đầu tiên này đã cung cấp cho bạn phần giới thiệu đầy đủ về các khái niệm với các ví dụ từng bước

Với kiến ​​thức mà bạn có được từ hướng dẫn này, về các quy tắc và nguyên tắc của RESTful, bạn có thể xây dựng một API RESTful một cách dễ dàng. Mặc dù có các khung để phát triển API RESTful, nhưng có thể thực hiện bằng cách sử dụng PHP lõi đơn giản sẽ hiệu quả và mang lại hiệu suất tốt

Trong phần tiếp theo, bạn sẽ thấy về tất cả các khía cạnh của việc phát triển API dịch vụ web CRUD RESTful bằng cách sử dụng PHP cho một thực thể

Chúng tôi có thể tạo 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 REST trong PHP là gì?

API Rest là API cho phép lập trình viên gửi và nhận thông tin từ các chương trình khác bằng các lệnh giao thức HTTP như GET và POST . Mặc dù API REST hoạt động với hầu hết các giao thức nhưng nó được thiết kế đặc biệt để truyền dữ liệu qua giao thức HTTP.

Làm cách nào để lấy dữ liệu từ URL 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';

Làm cách nào tôi có thể tạo API trong cơ sở dữ liệu PHP và MySQL?

Chúng tôi sẽ tạo API REST bằng PHP để xử lý dữ liệu nhân viên nhằm tạo, đọc, cập nhật và xóa dữ liệu nhân viên. .
Bước 1. Tạo bảng cơ sở dữ liệu MySQL. .
Bước 2. API REST đơn giản để tạo bản ghi. .
Bước 3. API REST đơn giản để đọc bản ghi. .
Bước 4. API REST đơn giản để cập nhật bản ghi. .
Bước5. API REST đơn giản để xóa bản ghi. .
Bước 6. Tạo ra

Chủ Đề