* WEEKEND: another HTTP endpoint building library With ~WEEKEND~, endpoints are classes defined with the metaclass ~endpoint~. The ~endpoint~ metaclass provides a number of class-level slots which specify the HTTP method and the route that the class is meant to handle. Compiling the endpoint class automatically builds and registers a hunchentoot handler. Recompiling the class removes the old handler and builds a new one. Instance slots of an ~endpoint~ class hold data necessary to process the request. If a slot is defined with an ~:initarg~, then that slot's value is meant to be supplied by the HTTP request, be through embedded "route variables", query parameters, or fields in a structured request body. Any slot defined without an ~:initarg~ is meant to have its value supplied by some stage in the handler protocol. The handler protocol is used to control the handling of requests. All endpoint classes are required to specialize the ~weekend:handle~ method. Optionally they may also specialize the ~weekend:authenticate~ and ~weekend:authorize~ methods. Before ~handle~ is called, ~authorize~ is called, and before ~authorize~ is called, ~authenticate~ is called. If either ~authenticate~ or ~authorize~ return ~NIL~, then the appropriate HTTP error is returned to the client. Otherwise ~handle~ is assumed to have all it needs to produce the content to be returned to the requesting client. ** Examples See [[./examples][examples]] for a few examples. ** Advantages of the Approach OOPyness is an advantage. Object orientation allows one to: - Recycle logic by defining protocol methods on mixin superclasses of endponit classes. Whole regions of a site or API can easly be extended or modified. - ~ENDPOINT~ itself can be sublcassed for special endpoint definition logic. E.g. ensuring a route prefix without having to type it each time can be acheived by specializing ~instantiate-instance~ on a subclass of ~ENDPOINT~. - You can use the reified endpoints to automatically generate nice documentation. (Less than nice documentation is already provided via the function ~weekend:print-all-route-documentation~.) - Similarly, you can automatically generate API client code for your langauge of choice.