swagger1st和friboo

swagger1st

swagger1st库提供了符合Ring规范的handler,能够根据Swagger定义解析、验证、路由HTTP请求。

使用swagger1st,不是在代码中定义API,而是利用Swagger官方的编辑器根据Swagger 2.0规范定义API。这样产生了一种API优先的开发流程,并且是使用独立于任何开发语言的方式定义API。

friboo

friboo提供了一些component,用于辅助Clojure的微服务应用开发。friboo鼓励采用swagger1st实行API优先的开发方式。

HTTP component

使用def-http-component宏创建HTTP component。http组件启动时,内部调用swagger1st创建handler,并使用jetty适配器运行之。

(ns myapi
  (:require [org.zalando.stups.friboo.system.http :refer [def-http-component]))

(def-http-component MyAPI "my-api.yaml" [db scheduler])

(defn my-api-function [parameters request db scheduler]
  ; 这里能够使用依赖的db和scheduler组件
  )

上面的代码创建了MyAPI组件,依赖于db和scheduler组件。my-api-function函数的第一个参数是一个扁平的map,对应的Swagger规范的parameters。

http组件使用:configuration存放配置项,在启动组件时用到它,例如

(map->MyAPI {:configuration {:port        8080
                             :cors-origin "*.zalando.de"}})

推荐采用下面的方式创建一个http系统。

(ns my-app.core
  (:require [org.zalando.stups.friboo.config :as config]
            [org.zalando.stups.friboo.system :as system]))

(defn run
  [default-configuration]
  (let [configuration (config/load-configuration
                        (system/default-http-namespaces-and :db)
                        [my-app.sql/default-db-configuration
                         my-app.api/default-http-configuration
                         default-configuration])
        system (system/http-system-map configuration
                                       my-app.api/map->API [:db]
                                       :db (my-app.sql/map->DB {:configuration (:db configuration)}))]

    (system/run configuration system)))

DB component

使用def-db-component宏创建。DB组件本质上是一个兼容db-spec的数据结构,使用:datasource存放数据源。

(ns mydb
  (:require [org.zalando.stups.friboo.system.db :refer [def-db-component]))

(def-db-component MyDB)

与http组件类似,db组件使用:configuration存放配置项,在启动组件时用到。

(map->MyDB {:configuration {:subprotocol "postgresql"
                            :subname     "localhost/mydb"}})

你可能感兴趣的:(swagger1st和friboo)