Thắc mắc về method POST webservice restful

Mình có thấy 1 web service khi mình gửi dữ liệu qua method POST cho nó xử lý thì nó sẽ trả về id và status = queued || error , và truyền dữ liệu cho thằng khác xử lý (do cái này xử lý rất là lâu), nếu status = queued mình phải dùng id đó rồi lại While(true) gọi đến method GET nó cũng trả về status = inprocess || completed, nếu là completed thì nó sẽ trả về cùng với data mà mình cần.
Cấu trúc nó là như vậy và định implement nó nhưng mình thắc mắc là sao method POST nó không cần thằng kia xử lý xong mà có thể trả response về cho client ngay tức thì được ?

HTTP Method nào cũng đâu quan trọng, quan trọng là ở phía server handle cái request đó như thế nào. Có nhiều cách để implement, nhưng về cơ bản là ở phía server sẽ thực hiện “nhờ ai đó” xử lý cái request từ client rồi ngay lập tức response cho client với id của cái async task.

Implement cái này có nhiều cách, có thể dùng thread/task để process data, có thể gửi async request tới một server khác ở dạng tạo một cái task rồi chờ bên kia làm nó gửi notification về. Hoặc đơn giản nhất là tạo một cái crontab cho nó chạy, khi nào xong thì nó write vào DB. Phía client cứ polling liên tục khi nào DB có data thì trả về.

2 Likes

Cảm ơn anh, mấy từ khóa này em chưa nghe bao giờ :smiley: vậy chắc phải mất mấy ngày tìm hiểu nữa rồi :disappointed:

ài, ok, em nghĩ thế này đi, đó là các kiểu fire and forget trong lập trình ấy. Em yêu cầu làm một việc, rồi em quên nó đi. Em không phải chờ. Anh sửa lại câu trả lời để tránh tập trung vào chữ async.

Nếu em viết app trên PC thì nó sẽ là backgroud thread.
Còn nếu em biết cronjob thì em cứ tưởng tượng là cái nhiệm vụ process data sẽ do cronjob làm. Khi làm xong ghi vào DB.

Còn nếu em đang làm bằng java thì em sử dụng framework gì? Em cứ search tên framework + background task sẽ tìm thấy cách người ta làm.

2 Likes

em dùng Spring MVC anh ạ,

Google với từ khoá “Spring MVC background task” ra ngay kết quả đầu tiên luôn


Còn về Async thì em chỉ cần đọc cái định nghĩa đơn giản thế này là được

When you execute something synchronously, you wait for it to finish before moving on to another task. When you execute something asynchronously, you can move on to another task before it finishes.

2 Likes

Hic trước em học thread trên lớp mà không biết để làm gì để bây giờ phải hỏi câu ngu ngơ này :smile: tìm hiểu lại thì giờ mới biết haizz

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?