Fetch API wrapper for clojurescript!
Add dependency to your project.clj file.
Add dependency to your dependencies vector.
...
:dependencies
[...
[org.clojars.scknkkrer/suluk "0.0.7"]
...]
...
Require suluk
from your project.
(ns perfect.cljs.app
(:require [suluk.core :as suluk]
...
;; Use fetch! function from suluk.core namespace for the functionality.
;; This function takes a keyword as first paramter that represents method of your request.
;; Each method type has individual function signature.
;; GET -> [url function-map]
;; GET request example:
(suluk/fetch! :get
"https://jsonplaceholder.typicode.com/todos/1"
[suluk.response/res->json js/console.info])
;; => #object [Promise [object Promise]]
;; Returns promise for the future usage.
;; The third argument of the function is applied to response of the request,
;; With left-to-right direction respectively.
;; POST -> [url properties-map function-map]
;; POST request example:
(fetch! :post "https://jsonplaceholder.typicode.com/posts"
{:body "hello=bello&userId=1991"}
[suluk.response/res->json js/console.info])
;; => #object [Promise [object Promise]]
;; CONSOLE: {hello: "bello", userId: "1991", id: 101}
;; You can use clojure hash-map as request body in your post request.
(fetch! :post "https://jsonplaceholder.typicode.com/posts"
{:body {:hello "bello" :userId 1991}}
[suluk.response/res->json js/console.info])
;; => #object [Promise [object Promise]]
;; CONSOLE: {hello: "bello", userId: "1991", id: 101}
;; POST-JSON -> [url properties-map function-map]
;; POST-JSON request example:
(fetch! :post-json "https://jsonplaceholder.typicode.com/posts"
{:body {:title "Başlık"
:body "Gövde"
:userId 1992}}
js/console.info)
;; => #object [Promise [object Promise]]
;; CONSOLE: {title: "Başlık", body: "Gövde", userId: 1992, id: 101}
;; post-json keyword is using for post request with JSON payload that waiting response as JSON object.
;; It is eleminating efforts and take care small works.
If you want to use Suluk with re-frame, all you have to do is:
Require suluk.re-frame
namespace from your event namespace to load existed fx function that comes with Suluk
(ns perfect.re-frame.app.events
(:require ...
[suluk.re-frame]))
The effect named suluk!
is loaded and ready to use.
(re-frame/reg-fx
:console!
(fn [value]
(js/console.info value)))
(re-frame/reg-event-fx
:user/test!
(fn [_ [_ value]]
{:console! value}))
(re-frame/reg-event-fx
:user/get-dummy-api-json
(fn [_ _]
{:suluk! [:post-json "https://jsonplaceholder.typicode.com/posts"
{:body {:title "Başlık"
:body "Gövde"
:userId 1992}}
#(re-frame/dispatch [:user/test! %])]}))
(re-frame/dispatch [:user/get-dummy-api-json])
- Change the way the work of this library!
- Complete the README.md!
- Allow keywords as a function in function-map
Thank you all clojurians, this library aims to give something back to our perfect community!