用newLisp开发网站四 REST API

2023-11-27 01:18
文章标签 网站 开发 api rest newlisp

本文主要是介绍用newLisp开发网站四 REST API,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

URL中的$resource和lisp文件名对应

本节主要学习如何使用第二种路由方法来实现REST API。仍然阅读http://dragonfly.neocortex.io/dragonfly_routes

不过要看这一节:

RESTful routing with Route.Resource


首先是URL请求格式有讲究,

http://mysite.com/$resource[/action][/id][.format][?get params..]

$resource

$resource是个变量必须和放在resources目录下的lsp文件名相同,比如有一个wings.lsp文件,这里的url路径就应该从wings开始

比如

http://mysite.com/wings

如果找不到对应的文件,则会显示404错误,文档太老了,还在说500错误。


用FOOP处理REST请求

从Resource context继承

以wings.lsp为例,它必须从Resource继承出自己的,而且有书写格式要求,比如:

(DF:activate-plugin "artfulcode/json")
(new Resource 'Resource.Wings)
(context 'Resource.Wings)

第一行是必须的,照抄即可。第二行注意命名,Wings要写成首字母大写,无下划线,并且用Resource. 作为前缀

第三行切换到Resource.Wings context.

这里涉及到context和FOOP的概念,参考我的另外几篇文章。

所有这里$resource不仅映射到文件(wings.lsp),也映射到文件内部的FOOP对象。

action

action映射到该FOOP对象的某个函数。如果URL请求中没有指定action,则会调用默认构造函数。注意,action是大小写敏感的,下面是例子:

(define (Resource.Mailer:send)(println "action: "))

对应的urlg调用路径是:

http://localhost:8089/mailer/send


下面创建一个class的构造函数(也就是context的默认函数)用来处理没有action的REST 请求,REST 请求发过来后会调用它。

(define (Resource.Wings:Resource.Wings id response-format); defaults to calling show(show id response-format)
)


id和format

这个函数接受两个参数,对应了URL中的id和format参数。当然可以不处理这两个参数,因此他们是可选的。
运行一下例子,可以看到,当发出HTTP请求如下:

http://localhost:8080/wings/1.json
会得到结果如下:

["wings-condition", ["good", "excellent"]]

一个重要的提示,dragonfly没有设计成区分HTTP METHOD,设计者认为这不是个好主意,会带来很多的问题。所以不管什么HTTP方法的请求,都会调用到wings.lsp的中的默认构造函数。

下面用newlisp发起调用

get请求

> (get-url "http://localhost:8080/wings/1.json")
"[\"wings-condition\", [\"good\", \"excellent\"]]"
post请求

> (post-url "http://localhost:8080/wings/1.json" "a=1" "application/x-www-form-urlencoded")
"[\"wings-condition\", [\"good\", \"excellent\"]]"
因此,如果觉得数据传递需要保密,或者很长,可以用post请求,一般get请求即可。

dragonfly推荐使用action来表达请求的意图,如下,的确是个很好的设计。


resouce是photos

action的可选值是: 无,new, create, show, edit, update, destroy

这里是举例,不是固定的。比如在我的一个一个应用中,action的值是: 无,save(create or update), show, build, destroy

id是可选的, 一般用于定位到复数中的某个对象

format没有

参数自己随意吧


返回结果
如何返回数据给调用者?直接用print函数


如何获得参数

用($POST key)或者($GET key),比如:

(print ($POST "a"))

参考文档: http://dragonfly.neocortex.io/dragonfly_getpost








这篇关于用newLisp开发网站四 REST API的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/426683

相关文章

SpringBoot结合Knife4j进行API分组授权管理配置详解

《SpringBoot结合Knife4j进行API分组授权管理配置详解》在现代的微服务架构中,API文档和授权管理是不可或缺的一部分,本文将介绍如何在SpringBoot应用中集成Knife4j,并进... 目录环境准备配置 Swagger配置 Swagger OpenAPI自定义 Swagger UI 底

使用Python的requests库调用API接口的详细步骤

《使用Python的requests库调用API接口的详细步骤》使用Python的requests库调用API接口是开发中最常用的方式之一,它简化了HTTP请求的处理流程,以下是详细步骤和实战示例,涵... 目录一、准备工作:安装 requests 库二、基本调用流程(以 RESTful API 为例)1.

Python38个游戏开发库整理汇总

《Python38个游戏开发库整理汇总》文章介绍了多种Python游戏开发库,涵盖2D/3D游戏开发、多人游戏框架及视觉小说引擎,适合不同需求的开发者入门,强调跨平台支持与易用性,并鼓励读者交流反馈以... 目录PyGameCocos2dPySoyPyOgrepygletPanda3DBlenderFife

使用Python开发一个Ditto剪贴板数据导出工具

《使用Python开发一个Ditto剪贴板数据导出工具》在日常工作中,我们经常需要处理大量的剪贴板数据,下面将介绍如何使用Python的wxPython库开发一个图形化工具,实现从Ditto数据库中读... 目录前言运行结果项目需求分析技术选型核心功能实现1. Ditto数据库结构分析2. 数据库自动定位3

Django开发时如何避免频繁发送短信验证码(python图文代码)

《Django开发时如何避免频繁发送短信验证码(python图文代码)》Django开发时,为防止频繁发送验证码,后端需用Redis限制请求频率,结合管道技术提升效率,通过生产者消费者模式解耦业务逻辑... 目录避免频繁发送 验证码1. www.chinasem.cn避免频繁发送 验证码逻辑分析2. 避免频繁

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

SpringBoot监控API请求耗时的6中解决解决方案

《SpringBoot监控API请求耗时的6中解决解决方案》本文介绍SpringBoot中记录API请求耗时的6种方案,包括手动埋点、AOP切面、拦截器、Filter、事件监听、Micrometer+... 目录1. 简介2.实战案例2.1 手动记录2.2 自定义AOP记录2.3 拦截器技术2.4 使用Fi

PyQt5 GUI 开发的基础知识

《PyQt5GUI开发的基础知识》Qt是一个跨平台的C++图形用户界面开发框架,支持GUI和非GUI程序开发,本文介绍了使用PyQt5进行界面开发的基础知识,包括创建简单窗口、常用控件、窗口属性设... 目录简介第一个PyQt程序最常用的三个功能模块控件QPushButton(按钮)控件QLable(纯文本

基于Python开发一个图像水印批量添加工具

《基于Python开发一个图像水印批量添加工具》在当今数字化内容爆炸式增长的时代,图像版权保护已成为创作者和企业的核心需求,本方案将详细介绍一个基于PythonPIL库的工业级图像水印解决方案,有需要... 目录一、系统架构设计1.1 整体处理流程1.2 类结构设计(扩展版本)二、核心算法深入解析2.1 自

Knife4j+Axios+Redis前后端分离架构下的 API 管理与会话方案(最新推荐)

《Knife4j+Axios+Redis前后端分离架构下的API管理与会话方案(最新推荐)》本文主要介绍了Swagger与Knife4j的配置要点、前后端对接方法以及分布式Session实现原理,... 目录一、Swagger 与 Knife4j 的深度理解及配置要点Knife4j 配置关键要点1.Spri