2013-08-08 40 views
5

Tôi vừa mới bắt đầu tìm hiểu Clojure và đang vật lộn với các thay đổi API trong vài năm qua. Đặc biệt, trong 1.2 đã có một chức năng http-agent trong contrib cho phép cho các yêu cầu HTTP thực sự đơn giản:Thực hiện các yêu cầu HTTP với Clojure

(http-agent "http..." :method "POST" :body "foo=1") 

Chức năng này đã được gỡ bỏ và có vẻ như rằng bây giờ bạn nên sử dụng một trong hai clojure.java.io hoặc giải pháp của bên thứ ba như http-kit hoặc clj-http.

Tôi thực sự ngạc nhiên khi java.io có vẻ thấp hơn nhiều và mất tính đơn giản hoặc http-đại lý và thực hiện yêu cầu http có vẻ như một thứ gì đó phải nằm trong tập hợp thư viện chính (tôi nhận thấy điều này rất chủ quan).

Lý do để loại bỏ tác nhân http là gì? Nó không phù hợp với triết lý cốt lõi của Clojure? Và các đề xuất cho thư viện nào tốt nhất để sử dụng cho các yêu cầu HTTP cơ bản?

Trả lời

7

Tôi không thể đưa ra tuyên bố có thẩm quyền về lý do tại sao bất kỳ phần nào của contrib cũ không đưa nó vào contrib mới, nhưng nói chung mọi thứ đã được chuyển qua khi đủ người quan tâm, bao gồm một số khả năng và sẵn sàng để duy trì thư viện mới. Có lẽ trong trường hợp này đơn giản là không đủ quan tâm. Ngoài ra, nó rất đơn giản để xây dựng các dự án Clojure trên nhiều thư viện và không rõ rằng sự hiện diện của thư viện máy khách http trong tập hợp thư viện lõi hoặc contrib sẽ làm mọi thứ đơn giản hơn và/hoặc dễ dàng hơn cho các nhà phát triển so với hiện tại, với các tùy chọn tuyệt vời có sẵn trong hệ sinh thái rộng hơn.

Đối với ví dụ cụ thể về các tùy chọn tuyệt vời như vậy, tôi sẽ hướng bạn đến clj-httphttp.async.client (theo thứ tự bảng chữ cái, tùy chọn nào phù hợp tùy thuộc vào việc bạn có được hưởng lợi từ yêu cầu không đồng bộ).

+0

Michal, cảm ơn rất nhiều vì câu trả lời này. Câu hỏi của tôi được sinh ra từ sự thiếu hiểu biết về môi trường Clojure và câu trả lời của bạn sẽ đưa tôi thêm một bước nữa để hiểu điều này. Cảm ơn cũng cho các khuyến nghị. – Alistair77

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