--- Bài mới hơn ---
Restful Api Là Gì? Xây Dựng Webservice Với Restful Api Trong Php
Hướng Dẫn Tuyệt Vời Về Cách Xây Dựng Api Restful Vớicore
Làm Quen Với Web Api 2 Trong .net
Api Là Gì Trong Java
Hướng Dẫn Lập Trình Java Restful Web Service Cho Người Mới Bắt Đầu
Với sự phát triển của khung phát triển di động và JavaScript, sử dụng API RESTful là tùy chọn tốt nhất để xây dựng một giao diện duy nhất giữa dữ liệu của bạn và máy khách của bạn.
Trong hướng dẫn này, chúng ta sẽ khám phá những cách bạn có thể xây dựng và thử nghiệm API mạnh mẽ bằng cách sử dụng Laravel với xác thực. Chúng ta sẽ sử dụng Laravel 5.x.
API RESTful
Trước tiên, chúng ta cần hiểu chính xác những gì được coi là API RESTful. REST là viết tắt của REpsentational State Transfer và là một kiểu kiến trúc để giao tiếp mạng giữa các ứng dụng, dựa trên giao thức không trạng thái (thường là HTTP) để tương tác.
Động từ HTTP đại diện cho hành động
Trong API RESTful, chúng ta sử dụng các động từ HTTP làm hành động và các điểm cuối là tài nguyên được tác động. Chúng ta sẽ sử dụng các động từ HTTP cho ý nghĩa ngữ nghĩa của chúng:
-
GET
: lấy tài nguyên
-
POST
: tạo tài nguyên
-
PUT
: cập nhật tài nguyên
-
DELETE
: xóa tài nguyên
Cập nhật hành động: PUT so với POST
API RESTful là một vấn đề của nhiều cuộc tranh luận và có rất nhiều ý kiến trên mạng về việc là tốt nhất để cập nhật với POST
, PATCH
hay PUT
, hoặc nếu hành động tạo ra là tốt nhất còn lại để các PUT
động từ. Trong bài viết này, chúng tôi sẽ sử dụng PUT
cho hành động cập nhật, theo HTTP RFC, PUT
có nghĩa là tạo/cập nhật tài nguyên tại một vị trí cụ thể. Một yêu cầu khác cho động từ PUT
là idempotence, trong trường hợp này về cơ bản có nghĩa là bạn có thể gửi yêu cầu đó 1, 2 hoặc 1000 lần và kết quả sẽ giống nhau: một tài nguyên được cập nhật trong cơ sở dữ liệu.
Tài nguyên
Tài nguyên sẽ là mục tiêu của các hành động, trong trường hợp của chúng tôi là Bài viết và Người dùng và chúng có điểm cuối riêng:
Trong hướng dẫn api laravel này, các tài nguyên sẽ có tỷ lệ 1:1 trên các mô hình dữ liệu của chúng ta, nhưng đó không phải là một yêu cầu. Bạn có thể có các tài nguyên được thể hiện trong nhiều hơn một mô hình dữ liệu (hoặc hoàn toàn không được đại diện trong cơ sở dữ liệu) và các mô hình hoàn toàn vượt quá giới hạn cho người dùng. Cuối cùng, bạn có thể quyết định cách kiến trúc sư tài nguyên và mô hình theo cách phù hợp với ứng dụng của bạn.
Lưu ý về tính nhất quán
Ưu điểm lớn nhất của việc sử dụng một tập hợp các quy ước như REST là API của bạn sẽ dễ dàng tiêu thụ và phát triển hơn nhiều. Một số điểm cuối khá đơn giản và do đó, API của bạn sẽ dễ sử dụng và bảo trì hơn nhiều so với việc có các điểm cuối như GET /get_article?id_article=12
và POST /delete_article?number=40
. Tôi đã xây dựng các API khủng khiếp như thế trong quá khứ và tôi vẫn ghét bản thân mình vì nó.
Tuy nhiên, sẽ có những trường hợp khó có thể ánh xạ tới lược đồ Create/Retrieve/Update/Delete. Hãy nhớ rằng các URL không được chứa động từ và tài nguyên không nhất thiết phải là hàng trong một bảng. Một lưu ý khác là bạn không phải thực hiện mọi hành động cho mọi tài nguyên.
Thiết lập dự án web service của Laravel
Như với tất cả các framework PHP hiện đại, chúng tôi sẽ cần Composer để cài đặt và xử lý các phụ thuộc của chúng tôi. Sau khi bạn làm theo các hướng dẫn tải xuống (và thêm vào biến môi trường đường dẫn của bạn), hãy cài đặt Laravel bằng lệnh:
$ composer global require laravel/installer
Sau khi cài đặt kết thúc, bạn có thể tạo ra một ứng dụng mới như thế này:
Đối với lệnh trên, bạn cần phải có ~/composer/vendor/bin
trong $PATH
. Nếu bạn không muốn giải quyết vấn đề đó, bạn cũng có thể tạo một dự án mới bằng Composer:
$ composer create-project --pfer-dist laravel/laravel myapp
Với cài đặt Laravel, bạn sẽ có thể khởi động máy chủ và kiểm tra xem mọi thứ có hoạt động không:
Di chuyển và mô hình
Trước khi thực sự viết di chuyển đầu tiên của bạn, hãy đảm bảo bạn đã tạo cơ sở dữ liệu cho ứng dụng này và thêm thông tin đăng nhập vào .env
tệp nằm trong thư mục gốc của dự án.
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
Bạn cũng có thể sử dụng Homestead, một hộp Vagrant được chế tạo đặc biệt cho Laravel, nhưng đó là một chút ngoài phạm vi của bài viết này.
Hãy bắt đầu với mô hình đầu tiên của chúng ta và di chuyển Điều khoản. Bài viết nên có một tiêu đề và một lĩnh vực cơ thể, cũng như một ngày sáng tạo. Laravel cung cấp một số lệnh thông qua công cụ dòng lệnh Artisan của Laravel giúp chúng ta bằng cách tạo các tệp và đặt chúng vào các thư mục chính xác. Để tạo mô hình Bài viết, chúng ta có thể chạy:
$ php artisan make:model Article -m
Tùy chọn -m
là chữ viết tắt --migration
và nó nói với Artisan để tạo ra một mô hình của chúng tôi. Đây là di chuyển được tạo:
Chúng ta hãy mổ xẻ điều này trong một giây:
- Các phương thức
up()
và down()
sẽ được chạy khi chúng ta di chuyển và khôi phục tương ứng;
-
-
- Và cuối cùng,
Schema::dropIfExists()
tất nhiên, sẽ bỏ bảng nếu nó tồn tại.
Ngoài ra, hãy thêm hai dòng vào up()
phương thức của chúng tôi :
Bạn cũng có thể sử dụng tùy chọn --step
ở đây và nó sẽ tách từng di chuyển thành lô riêng để bạn có thể cuộn chúng lại nếu cần.
Bây giờ, hãy quay lại mô hình của chúng tôi và thêm các thuộc tính đó vào $fillable
trường để chúng tôi có thể sử dụng chúng trong mô hình Article::create
và Article::update
mô hình của chúng tôi:
class Article extends Model { protected $fillable = '); Route::get('articles/{id}', 'articles','); Route::put('articles/{id}',');
Chúng tôi có thể cải thiện các điểm cuối bằng cách sử dụng ràng buộc mô hình tuyến đường ngầm. Bằng cách này, Laravel sẽ đưa Article
cá thể vào các phương thức của chúng tôi và tự động trả về 404 nếu không tìm thấy. Chúng tôi sẽ phải thay đổi tệp tuyến đường và trên bộ điều khiển:
Route::get('articles', ''ArticleControl''''); Route::post('articles/{article}','); Route::delete();
Trong phần trên, chúng tôi đã sử dụng một phương thức trên mô hình Người dùng để tạo mã thông báo. Điều này hữu ích để chúng tôi chỉ có một cách duy nhất để tạo mã thông báo. Thêm phương thức sau vào mô hình Người dùng của bạn:
Và đó là nó. Người dùng hiện đang đăng ký và nhờ xác nhận Laravel và ra khỏi xác thực hộp, name
, email
, password
, và password_confirmation
lĩnh vực được yêu cầu, và các thông tin phản hồi được xử lý tự động. Kiểm tra validator()
phương thức bên trong RegisterController
để xem các quy tắc được thực hiện như thế nào.
Đây là những gì chúng ta nhận được khi đạt điểm cuối đó:
$ curl -X POST http://localhost:8000/api/register -H "Accept: application/json" -H "Content-Type: application/json" -d '{"name": "John", "email": "", "id": 51, "name": "John", "updated_at": "2017-06-20 21:17:15" } }
Tạo một điểm cuối đăng nhập
Và chúng ta có thể liên kết nó trên tập tin tuyến đường:
Route::post('login', 'Auth", "password": "toptal" }"
Để gửi mã thông báo trong yêu cầu, bạn có thể thực hiện bằng cách gửi một thuộc tính api_token
trong tải trọng hoặc dưới dạng mã thông báo mang trong tiêu đề yêu cầu ở dạng Authorization: Bearer Jll7q0BSijLOrzaOSm5Dr5hW9cJRZAJKOzvDlxjKCXepwAeZ7JR6YP5zQqnw
.
Đăng xuất
Với chiến lược hiện tại của chúng tôi, nếu mã thông báo bị sai hoặc bị thiếu, người dùng sẽ nhận được phản hồi không được xác thực (chúng tôi sẽ triển khai trong phần tiếp theo). Vì vậy, đối với điểm cuối đăng xuất đơn giản, chúng tôi sẽ gửi mã thông báo và nó sẽ bị xóa trên cơ sở dữ liệu.
routes/api.php
:
Route::post('logout', 'Auth, ... },
Lệnh kiểm tra sẽ có sẵn như thế này:
$ composer test
Thiết lập các nhà máy cho các thử nghiệm của chúng tôi
Các nhà máy sẽ cho phép chúng tôi nhanh chóng tạo các đối tượng với dữ liệu phù hợp để thử nghiệm. Chúng nằm trong database/factories
thư mục. Laravel ra khỏi hộp với một nhà máy cho User
lớp, vì vậy hãy thêm một cái cho Article
lớp:
Các Faker thư viện đã được tiêm để giúp chúng tôi tạo ra định dạng đúng của dữ liệu ngẫu nhiên cho các mô hình của chúng tôi.
Thử nghiệm đầu tiên của chúng tôi
Chúng ta có thể sử dụng các phương thức khẳng định của Laravel để dễ dàng đạt điểm cuối và đánh giá phản ứng của nó. Hãy tạo thử nghiệm đầu tiên của chúng tôi, thử nghiệm đăng nhập, sử dụng lệnh sau:
$ php artisan make:test Feature/LoginTest
Và đây là bài kiểm tra của chúng tôi:
Những phương pháp này kiểm tra một vài trường hợp đơn giản. Các json()
phương pháp chạm endpoint và người kia khẳng định là khá tự giải thích. Một chi tiết về assertJson()
: phương thức này chuyển đổi phản hồi thành một mảng tìm kiếm đối số, vì vậy thứ tự là quan trọng. Bạn có thể xâu chuỗi nhiều assertJson()
cuộc gọi trong trường hợp đó.
Bây giờ, hãy tạo bài kiểm tra điểm cuối đăng ký và viết một cặp cho điểm cuối đó:
$ php artisan make:test RegisterTest
Và cuối cùng, điểm cuối đăng xuất:
$ php artisan make:test LogoutTest
Điều quan trọng cần lưu ý là, trong quá trình thử nghiệm, ứng dụng Laravel không được khởi tạo lại theo yêu cầu mới. Điều đó có nghĩa là khi chúng ta nhấn phần mềm trung gian xác thực, nó sẽ lưu người dùng hiện tại bên trong TokenGuard
thể hiện để tránh đánh lại cơ sở dữ liệu. Một lựa chọn khôn ngoan, tuy nhiên, trong trường hợp này, điều đó có nghĩa là chúng ta phải chia bài kiểm tra đăng xuất thành hai, để tránh mọi vấn đề với người dùng được lưu trong bộ nhớ cache trước đó.
Việc kiểm tra các điểm cuối của Điều cũng rất đơn giản:
Bước tiếp theo
Thats tất cả để có nó. Chắc chắn có cơ hội để cải thiện, bạn có thể triển khai OAuth2 với gói Passport , tích hợp lớp chuyển đổi và phân trang (tôi khuyên dùng Fractal), danh sách này có trên nhưng tôi muốn tìm hiểu những điều cơ bản về tạo và thử nghiệm API trong Laravel mà không cần gói bên ngoài.
Laravel chắc chắn đã cải thiện trải nghiệm của tôi với PHP và việc dễ dàng thử nghiệm với nó đã củng cố mối quan tâm của tôi đối với 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ó.
Nếu bạn đang thiết kế API công khai, hãy xem 5 Quy tắc vàng cho Thiết kế API web tuyệt vời .
--- Bài cũ hơn ---
Xây Dựng Webservice Với Restful Api Trong Php
Hướng Dẫn Viết Luận Văn
Dịch Vụ Viết Luận Văn Tiếng Anh
Bài Báo Khoa Học P6: Viết Tóm Tắt Abstract
Tham Khảo Các Bài Mẫu Argumentative Essay Hay Nhất