lisp开发http开发探险记录(启航)

简介: lisp不缺乏共享资源,下面是http开发能用到的资源 http server: s-http-server ucw.httpd http-services woo cl-http portableAserve Hunchentoot 这次选择slime+sbcl+
这次选择slime+sbcl+emacs+quicklisp作为探险的装备,Hunchentoot作为起点

Huncentoot

Huncentoot是一个http server.


; SLIME 2015-12-13
CL-USER> (ql:quickload "hunchentoot")
To load "hunchentoot":
  Load 1 ASDF system:
    hunchentoot
; Loading "hunchentoot"
.............
("hunchentoot")
CL-USER> (hunchentoot:start (make-instance 'hunchentoot:easy-acceptor :port 4242))
CL-USER> (hunchentoot:define-easy-handler (say-yo :uri "/yo") (name)
  (setf (hunchentoot:content-type*) "text/plain")
  (format nil "Hey~@[ ~A~]!" name))
SAY-YO
CL-USER>


现在lisp的http服务已经启动了,点击下面地址访问看看


http://127.0.0.1:4242/

http://127.0.0.1:4242/yo?name=Dude


Clack

lisp有很多http server真眼花缭乱,现在有了这个clack可以把各种http服务统一到一个框架里来.clack是一个抽象层,下层可以使用各种http服务实现.


CL-USER> (ql:quickload :clack)
To load "clack":
  Load 1 ASDF system:
    clack
; Loading "clack"
....
(:CLACK)
CL-USER> (clack:clackup
  (lambda (env)
    '(200
      (:content-type "text/plain")
      ("Hello, Clack!"))))
; in:
;      CLACK:CLACKUP (LAMBDA (ENV)
;                  '(200 (:CONTENT-TYPE "text/plain") ("Hello, Clack!")))
;     (LAMBDA (ENV) '(200 (:CONTENT-TYPE "text/plain") ("Hello, Clack!")))
;
; caught STYLE-WARNING:
;   The variable ENV is defined but never used.
;
; compilation unit finished
;   caught 1 STYLE-WARNING condition
To load "lack-middleware-backtrace":
  Load 1 ASDF system:
    lack-middleware-backtrace
; Loading "lack-middleware-backtrace"

To load "clack-handler-hunchentoot":
  Load 1 ASDF system:
    clack-handler-hunchentoot
; Loading "clack-handler-hunchentoot"
.............
Hunchentoot server is started.
Listening on localhost:5000.
#S(CLACK.HANDLER::HANDLER
   :SERVER :HUNCHENTOOT
   :ACCEPTOR #<SB-THREAD:THREAD "clack-handler-hunchentoot" RUNNING
                {1005AA5313}>)
CL-USER>


点击下面连接,看看效果

http://localhost:5000/


Caveman2

这是一个web应用开发框架.首先安装下面几个asdf system,


(ql:quickload :envy)

(ql:quickload :datafly)

(ql:quickload :caveman2)


创建一个web应用


(caveman2:make-project #P"~/common-lisp/myapp/" :author "www")


载入刚刚创建的web应用,并启动:


 (require "myapp")

(myapp:start :port 8080)


点击下面链接

http://localhost:8080



到此把整个http开发的框架架好了.



活在lisp里

启动web应用

CL-USER> (require :myapp)
;;; Computing Hangul syllable names
("SB-ROTATE-BYTE" "IRONCLAD" "ITERATE")
CL-USER> (myapp:start :port 8080)
To load "myapp":
  Load 1 ASDF system:
    myapp
; Loading "myapp"

To load "lack-middleware-accesslog":
  Load 1 ASDF system:
    lack-middleware-accesslog
; Loading "lack-middleware-accesslog"

To load "lack-middleware-session":
  Load 1 ASDF system:
    lack-middleware-session
; Loading "lack-middleware-session"

To load "lack-middleware-static":
  Load 1 ASDF system:
    lack-middleware-static
; Loading "lack-middleware-static"

To load "lack-middleware-backtrace":
  Load 1 ASDF system:
    lack-middleware-backtrace
; Loading "lack-middleware-backtrace"

To load "clack-handler-hunchentoot":
  Load 1 ASDF system:
    clack-handler-hunchentoot
; Loading "clack-handler-hunchentoot"
..
Hunchentoot server is started.
Listening on localhost:8080.
#S(CLACK.HANDLER::HANDLER
   :SERVER :HUNCHENTOOT
   :ACCEPTOR #<SB-THREAD:THREAD "clack-handler-hunchentoot" RUNNING
                {1009D62123}>)
CL-USER>


进入web

CL-USER> (in-package :myapp.web)
#<PACKAGE "MYAPP.WEB">


创建一个路由


(defroute "/welcome" (&key (|name| "Guest")) (format nil "Welcome, ~A" |name|))


点击

http://localhost:8080/hello




参考的资源

Is it feasible to do (serious) web development in Lisp?

http://stackoverflow.com/questions/556456/is-it-feasible-to-do-serious-web-development-in-lisp

Best web framework in Common-lisp?

http://stackoverflow.com/questions/540953/best-web-framework-in-common-lisp


lisp不缺乏共享资源,下面是http开发能用到的http服务器:


s-http-server ;;https://github.com/svenvc/s-http-server

ucw.httpd ;;https://github.com/erikg/ucw-core

woo ;;https://github.com/fukamachi/woo

portableAserve ;;http://franz.com/support/documentation/current/doc/aserve/aserve.html

Hunchentoot ;;http://weitz.de/hunchentoot/

cl-http ;;访问不了主站












目录
相关文章
|
7月前
|
XML 存储 网络协议
kettle开发篇-Http client
kettle开发篇-Http client
755 0
|
2月前
|
Rust 前端开发 API
Tauri 开发实践 — Tauri HTTP 请求开发
本文介绍了如何在 Tauri 中发起 HTTP 请求。首先通过安装 Tauri 生态中的工具包并配置 `tauri.conf.json` 文件来允许特定域名的 HTTP 通信。接着封装了一个简单的 HTTP 客户端类,并在页面中使用该客户端实现 GET 和 POST 请求。最后提供了完整的源码地址以供参考。此功能使得桌面应用能够与远程服务器进行交互,增强了应用的实用性。
119 1
Tauri 开发实践 — Tauri HTTP 请求开发
|
5月前
|
运维 Serverless API
Serverless 应用引擎使用问题之如何开发HTTP服务
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
7月前
|
SQL DataWorks Java
DataWorks操作报错合集之在阿里云 DataWorks 中,代码在开发测试阶段能够成功运行,但在提交后失败并报错“不支持https”如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
120 1
DataWorks操作报错合集之在阿里云 DataWorks 中,代码在开发测试阶段能够成功运行,但在提交后失败并报错“不支持https”如何解决
|
7月前
|
JSON Java API
Android 深入Http(5)从Retrofit源码来看Http,最新Android开发面试解答
Android 深入Http(5)从Retrofit源码来看Http,最新Android开发面试解答
|
7月前
|
Web App开发 前端开发 Java
SpringBoot配置HTTPS及开发调试
在实际开发过程中,如果后端需要启用https访问,通常项目启动后配置nginx代理再配置https,前端调用时高版本的chrome还会因为证书未信任导致调用失败,通过摸索整理一套开发调试下的https方案,特此分享
98 0
SpringBoot配置HTTPS及开发调试
|
7月前
|
缓存 前端开发 JavaScript
React和Next.js开发常见的HTTP请求方法
React和Next.js开发常见的HTTP请求方法
124 0
|
7月前
|
网络协议 安全 Java
理解HTTP协议:Java Web开发的基础
【4月更文挑战第3天】本文介绍了HTTP协议的基础知识,包括其无状态、应用层协议的特性,基于请求/响应的工作模式,以及TCP连接、HTTP请求和响应的流程。HTTP方法如GET、POST、PUT等用于不同操作,状态码则表示请求结果。在Java Web开发中,理解HTTP有助于设计RESTful API、管理状态、确保安全性、优化性能和处理错误。HTTP协议的深入理解对构建高效、健壮和安全的Web应用至关重要。
86 3
|
7月前
|
JSON Go API
Go语言网络编程:HTTP客户端开发实战
【2月更文挑战第12天】本文将深入探讨使用Go语言开发HTTP客户端的技术细节,包括发送GET和POST请求、处理响应、错误处理、设置请求头、使用Cookie等方面。通过实例演示和代码解析,帮助读者掌握构建高效、可靠的HTTP客户端的关键技术。
|
7月前
|
Linux 开发工具 git
【开发专题_03】unable to access ‘https://github.com/deviantony/docker-elk.git/‘: Failed connect to github
【开发专题_03】unable to access ‘https://github.com/deviantony/docker-elk.git/‘: Failed connect to github
145 2