|
|
|
;;;; ritherdon-rest.lisp
|
|
|
|
|
|
|
|
;;; A collection of functions to aid in the make
|
|
|
|
;;; http-requests to the Ritherdon REST API. This project is help me
|
|
|
|
;;; learn Common Lisp. So, there is not much emphasis on being too
|
|
|
|
;;; strict on best practices and defensive coding.
|
|
|
|
|
|
|
|
;;; NOTE: The Ritherdon REST API is part of an art exhibition at time
|
|
|
|
;;; of writing (29/06/2021). You will need to check if the server is
|
|
|
|
;;; still running if you want to run this code.
|
|
|
|
|
|
|
|
(in-package #:ritherdon-rest)
|
|
|
|
|
|
|
|
;; All the data provided by the Ritherdon REST API is in JSON. Becuase
|
|
|
|
;; of this I can set the `TEXT-CONTENT-TYPE' to JSON and keep it like
|
|
|
|
;; that until further notice.
|
|
|
|
(setq drakma:*text-content-types* (cons '("application" . "json")
|
|
|
|
drakma:*text-content-types*))
|
|
|
|
|
|
|
|
;; The Base URL which you build all your HTTP Requests on. You will
|
|
|
|
;; need to refer back to http://ritherdon.abbether.net/api/ui/ for the
|
|
|
|
;; full set of URL's.
|
|
|
|
(defvar *base-url* "http://ritherdon.abbether.net/api")
|
|
|
|
|
|
|
|
;; The http-request is actually 'drakma:http-request'. I've done it
|
|
|
|
;; this way to highlight the feature. It is the same as what you've
|
|
|
|
;; used in the past with C# and 'using static' statements. So, not
|
|
|
|
;; much to go into here apart from highlighting it's a thing in Common
|
|
|
|
;; Lisp, too.
|
|
|
|
(defun make-request (query)
|
|
|
|
(http-request (concatenate 'string *base-url* query)))
|
|
|
|
|
|
|
|
;; Same as the drakma example above. It can read as
|
|
|
|
;; 'cl-json:decode-json-from-string' but omitted the 'cl-json'
|
|
|
|
;; bit. You will find all package declarations in /src/package.lisp'.
|
|
|
|
(defun parse-request (query)
|
|
|
|
(decode-json-from-string(make-request query)))
|