2016-09-25 24 views
8

Khi người dùng đăng ký ứng dụng web của tôi, tôi gửi email để xác minh hộp thư đến của mình. Trong email có một liên kết đến một tài nguyên như thế này:Cách REST để xác minh email là gì?

GET /verify/{token} 

Kể từ khi tài nguyên đang được cập nhật đằng sau hậu trường, nó không phá vỡ các cách tiếp cận RESTful?

Tôi làm cách nào để thực hiện theo cách RESTful?

+0

Không thêm bất kỳ thứ gì sau hậu trường? Bạn sẽ cung cấp cho họ một hình thức để đăng bài để thay đổi nó? Điều đó sẽ được đăng và cập nhật mật khẩu, mã thông báo chỉ cho phép họ xem biểu mẫu chính xác .. –

+0

Hậu trường tôi tìm kiếm trong DB người dùng có mã thông báo này và đặt trường thành NULL xem xét hợp lệ email của người dùng đó. – user3482682

+0

Chỉ cần đến một hình thức (không chạm DB) sau đó đăng bài tự và sử dụng các param nhận được các param nhận được và gửi nó cho DB và làm cập nhật sau đó. Nếu người dùng truy cập URL bạn không muốn không cho phép họ đánh lại nó nếu họ cần quay lại để chắc chắn? –

Trả lời

0

Bạn không phải là quá nhiều REST? Với xác minh e-mail bạn muốn người dùng có thể chỉ cần nhấp vào liên kết từ bất kỳ tác nhân người dùng thư nào mà anh ta đang sử dụng, vì vậy bạn sẽ nhận được một GET đơn giản trên máy chủ (được hiển thị dưới dạng siêu liên kết cho người dùng) với mã thông báo hoặc trong đường dẫn hoặc là một phần của chuỗi truy vấn:

GET http://example.com/verify-email/TOKEN 
GET http://example.com/verify-email?token=TOKEN 

Hoặc là tốt cho trường hợp sử dụng này. Nó không thực sự là một tài nguyên bạn đang nhận được hoặc tạo ra; chỉ là một kích hoạt cho một số quá trình trên backend.

Tại sao bạn cho rằng điều này có thể chạy nhanh trong thiết kế tốt?

+0

Tôi nghĩ rằng điều này sẽ chạy afol thiết kế tốt bởi vì trong REST URI không nên là một động từ (xác minh trong trường hợp này). – user3482682

0

Tùy thuộc vào bạn đang cố gắng làm gì.

Ứng dụng có kích hoạt email sau khi xác thực người dùng không? Nếu vậy, nó không phải là một phương pháp idempotent và bạn nên sử dụng POST.

Ví dụ:

POST /users/{id}/verify/{token} 

Nếu phương pháp này không có bất kỳ hậu quả bên cạnh việc cập nhật, tôi nghĩ rằng bạn nên sử dụng PUT.

+0

Nếu ý định là người dùng có thể nhấp vào siêu liên kết trong email nhận được, POST và PUT là không thể trừ khi bạn bắt đầu bao gồm thẻ biểu mẫu; sẽ không hoạt động nếu người dùng xem email dưới dạng văn bản thuần túy. – JeroenHoek

+0

Mọi giao tiếp giữa API REST và loại tích hợp đó sẽ cần một trang web cho tương tác. Siêu liên kết trên email sẽ cần phải gửi người dùng đến một trang web, không phải cho API. Trang web sẽ nhận được GET/something? Token = blabla và gửi đến REST API –

4

Điều bạn đang nói không phải là REST. REST là cho máy để giao tiếp máy và không phải cho con người để giao tiếp máy. Bạn có thể phát triển một máy khách REST của bên thứ nhất, sẽ gửi kích hoạt tới dịch vụ REST.

Bạn có thể sử dụng xác minh của bạn URI trong trình duyệt để truy cập khách hàng REST:

# user follows a hyperlink in the browser manually 

GET example.com/client/v1/verify/{token} 
# asking the client to verify the token 

và sau đó khách hàng REST sẽ có được siêu liên kết để xác minh từ các dịch vụ REST và gửi đường bưu điện đến dịch vụ trong bối cảnh.

# the REST client follows the hyperlinks given by the service automatically 
# the REST client can run either on the HTTP client or server side 

GET example.com/api/v1 
# getting the starting page of the REST service 
# getting the hyperlink for verification 

POST example.com/api/v1/verification {token} 
# following the verification hyperlink 

Nếu bạn có máy chủ REST bên thứ nhất, thì yêu cầu HTTP tới dịch vụ REST sẽ chạy hoàn toàn trên máy chủ và bạn sẽ không thấy bất kỳ điều gì trong trình duyệt. Nếu bạn có một máy khách REST phía máy khách, thì bạn có thể gửi POST trong trình duyệt bằng AJAX CORS hoặc bạn có thể thử POST trực tiếp với một biểu mẫu HTML (không được khuyến nghị). Dù sao kích hoạt phải là POST hoặc PUT.

+0

Tôi đồng ý với bạn về việc kích hoạt sẽ là POST hoặc PUT. Nhưng theo quan điểm thiếu kinh nghiệm của tôi, tôi nghĩ rằng trong REST URI không nên là động từ (xác minh trong trường hợp này), nhưng mặt khác không tồn tại một yêu cầu HTTP XÁC MINH. – user3482682

+0

@ user3482682 Chỉ URI của ứng dụng khách có chứa động từ "xác minh". URI của dịch vụ chứa "xác minh", là danh từ. Vấn đề chính của bạn ở đây là bạn nhầm lẫn giữa trình duyệt với một máy khách REST. Trình duyệt không phải là một máy khách REST, nó chỉ là một máy khách HTTP. – inf3rno

+0

Cảm ơn bạn inf3rno cho lời khuyên của bạn, tôi đánh dấu câu trả lời của bạn là hữu ích. – user3482682

Các vấn đề liên quan