Giter Site home page Giter Site logo

ocaml-rest-server's Introduction

Rest_server

It is a simple framework for developing RESTfull JSON-communicating web-applications. Based on Http/af and Yojson.

Installation

git clone https://github.com/vasil-sd/ocaml-rest-server.git
opam pin add ocaml-rest-server

Usage

open Core

let items : (string * Yojson.Safe.json) list ref = ref []
let get_item name = Core.List.find ~f:(fun (n,_) -> name = n) !items
let del_item name = items := Core.List.filter ~f:(fun (n,_) -> name <> n ) !items
let add_item name json = items := (name, json) :: !items

module RA = Rest_server.Api

let get_items {RA.response_json;_} =
  `List (List.map ~f:(fun (n,_) -> `String n) !items)
  |> response_json

let get_item {RA.get_path_var; response_json; response_error; _} =
  let name = get_path_var "name" in
  match name with
  | None -> response_error ~text:"Parameter name is not defined!" ()
  | Some name ->
    match get_item name with
    | None ->
        response_error ~error:`Not_found
          ~text:("Rule '" ^ name ^ "' is not found!")
          ()
    | Some (_, json) ->
        response_json json

let put_item {RA.get_path_var; response_error; response_ok;_} json =
 let name = get_path_var "name" in
 match name with
 | None -> response_error ~text:"Parameter name is not defined!" ()
 | Some name -> add_item name json; response_ok ()

let del_item {RA.get_path_var; response_ok; response_error;_} =
  let name = get_path_var "name" in
  match name with
  | None -> response_error ~text:"Parameter name is not defined!" ()
  | Some name -> del_item name ; response_ok ()

let () =
  let open Rest_server in
  let open Api in
  empty
  |> get "/rules" (RA.Without_request get_items)
  |> post "/rules/{name}" (RA.With_request put_item)
  |> get "/rules/{name}" (RA.Without_request get_item)
  |> delete "/rules/{name}" (RA.Without_request del_item)
  |> main

License

BSD3, see LICENSE file for its text.

ocaml-rest-server's People

Contributors

vasil-sd avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.