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 ;;访问不了主站












目录
相关文章
|
11月前
|
JSON 中间件 Go
Go 网络编程:HTTP服务与客户端开发
Go 语言的 `net/http` 包功能强大,可快速构建高并发 HTTP 服务。本文从创建简单 HTTP 服务入手,逐步讲解请求与响应对象、URL 参数处理、自定义路由、JSON 接口、静态文件服务、中间件编写及 HTTPS 配置等内容。通过示例代码展示如何使用 `http.HandleFunc`、`http.ServeMux`、`http.Client` 等工具实现常见功能,帮助开发者掌握构建高效 Web 应用的核心技能。
517 61
|
Linux C语言 iOS开发
C语言结合AWTK开发HTTP接口访问界面
这样,我们就实现了在C语言中使用libcurl和AWTK来访问HTTP接口并在界面上显示结果。这只是一个基础的示例,你可以根据需要添加更多的功能和优化。例如,你可以添加错误处理机制、支持更多HTTP方法(如POST、PUT等)、优化用户界面等。
671 82
|
Rust 前端开发 API
Tauri 开发实践 — Tauri HTTP 请求开发
本文介绍了如何在 Tauri 中发起 HTTP 请求。首先通过安装 Tauri 生态中的工具包并配置 `tauri.conf.json` 文件来允许特定域名的 HTTP 通信。接着封装了一个简单的 HTTP 客户端类,并在页面中使用该客户端实现 GET 和 POST 请求。最后提供了完整的源码地址以供参考。此功能使得桌面应用能够与远程服务器进行交互,增强了应用的实用性。
1322 1
Tauri 开发实践 — Tauri HTTP 请求开发
|
11月前
|
C# 图形学 开发者
Unity开发中使用UnityWebRequest从HTTP服务器下载资源。
总之,UnityWebRequest就是游戏开发者手中的万能钓鱼竿,既可以获取文本数据,也能钓上图片资源,甚至是那声音的涟漪。使用UnityWebRequest的时候,你需要精心准备,比如确定URL、配置请求类型和头信息;发起请求;巧妙处理钓获的数据;还需要机智面对网络波澜,处理各种可能出现的错误。按照这样的过程,数据的钓取将会是一次既轻松愉快也效率高效的编程钓鱼之旅。
643 18
|
XML JSON Linux
Reqable:跨平台HTTP开发与调试工具
Reqable是一款功能强大且易于使用的跨平台HTTP开发与调试工具,具有多平台支持、全面的HTTP请求构建与解析、请求历史记录和环境管理等功能。它简化了HTTP请求的构建、发送和响应分析过程,为开发者提供了极大的便利。通过Reqable,开发者可以更高效地进行HTTP开发和调试,提高工作效率和代码质量。
1085 26
|
人工智能 网络协议 API
开发效率翻倍!Apipost这些协议调试秘籍,从HTTP到金融报文全搞定
Apipost是一款强大的API研发管理工具,支持多种协议与数据格式,包括HTTP(s)、WebSocket、SSE、gRPC、TCP及金融协议(如ISO 8583、FIX)。它内置国密算法库,提供HTTP文件秒传、全局参数配置等实用功能。在SSE调试中,可轻松处理AI模型流式响应;WebSocket与Socket.IO实现高效实时通信;GraphQL支持可视化Query编写;TCP模块解决金融报文编码难题;gRPC则具备服务反射与流式调试能力。Apipost不仅简化了多协议切换的复杂性,还自动生成文档,显著提升开发效率,让开发者专注于核心业务逻辑。
|
缓存 安全 数据处理
Objective-C开发:从HTTP请求到文件存储的实战
Objective-C开发:从HTTP请求到文件存储的实战
|
运维 Serverless API
Serverless 应用引擎使用问题之如何开发HTTP服务
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
JSON Java API
Android 深入Http(5)从Retrofit源码来看Http,最新Android开发面试解答
Android 深入Http(5)从Retrofit源码来看Http,最新Android开发面试解答
|
缓存 前端开发 JavaScript
React和Next.js开发常见的HTTP请求方法
React和Next.js开发常见的HTTP请求方法
584 0

热门文章

最新文章