(请注意,以下示例已从更大的示例中简化)
(ns example-app
(:require [ring.util.http-response :refer :all]
[compojure.api.sweet :refer :all]
[schema.core :as s]))
(defapi my-api
{:formats [:json]}
(context* "v0" []
:tags ["unversioned"]
(GET* "api-endpoint-1" []
:return Long
:summary "example endpoint v0/1"
(ok 123)))
(context* "v1" []
:tags ["version-1"]
(GET* "api-endpoint-2 []
:return String
:summary "example endpoint v1/1"
(ok "hello"))))
所以,鉴于上述情况,我想将其重写为:
(def context-v0
(context* "v0" []
:tags ["unversioned"]
(GET* "api-endpoint-1" []
:return Long
:summary "example endpoint v0/1
(ok 123)))
(def context-v1
(context* "v1" []
:tags ["version-1"]
(GET* "api-endpoint-2 []
:return String
:summary "example endpoint v1/1"
(ok "hello")))
(defapi my-api
context-v0
context-v1)
这将允许我在创建新版本的同时支持旧版本的api,而不必担心一个巨大的单个文件,这个文件可能会被粗心的未来打乱。
现在看来,执行此操作会导致swagger运行,但提取的上下文不会加载。只显示第一种格式的内容。
我是否必须将其扩展到其宏扩展版本才能使其正常工作?有更好的方法吗?
答案 0 :(得分:1)
我认为这应该有用。
(def v1 '("v0" []
:tags ["unversioned"]
(GET* "api-endpoint-1" []
:return Long
:summary "example endpoint v0/1"
(ok 123)))
(defapi my-api
(apply context* v0)
(apply context* v2))
答案 1 :(得分:0)
只是为遇到这个问题的其他人添加更多替代方案。
(def v1-routes
(routes
(GET "/a" [] (ok "Stable A"))
(GET "/b" [] (ok "Stable B"))))
(def v0-routes
(routes
(GET "/a" [] (ok "Next gen A"))
(GET "/b" [] (ok "Next gen B"))))
(defapi myapi
(context "/v0" [] v0-routes)
(context "/v1" [] v1-routes))
遵循这条路线的一个很好的副作用是"安装点"可以在不直接更改v*-routes
的情况下更改 (user1_env)root@ubuntu:~/user1/test/compare_files# cat compare.py
import pandas as pd
source1_df = pd.read_excel('a.xlsx', sheetname='source1')
source2_df = pd.read_excel('a.xlsx', sheetname='source2')
joined_df = source1_df.join(source2_df, on='Serial')
joined_df.to_excel('/root/user1/test/compare_files/result.xlsx')
。子路线不了解其父母背景。