ballerina 学习二十六 项目docker 部署&& 运行(二)

匿名 (未验证) 提交于 2019-12-02 22:56:40

ballerina 从发布,到现在官方文档的更新也是很给力的,同时也有好多改进,越来越好用了

可以参考官方文档 https://ballerina.io/learn/by-guide/restful-service/

  • 项目结构
└―― guide     └―― restful_service         └―― order_mgt_service.bal
  • 初始化项目
cd  guide &&   ballerina init
  • 效果
  • http rest 服务编写
import ballerina/http; import ballerinax/docker;  // docker 支持配置 @docker:Config {     registry:"dalongrong",     name:"restful_service",     tag:"v1.0" } endpoint http:Listener listener {     port:9090 };  // Order management is done using an in memory map. // Add some sample orders to 'ordersMap' at startup. map<json> ordersMap;  // RESTful service. @http:ServiceConfig { basePath: "/ordermgt" } service<http:Service> orderMgt bind listener {      // Resource that handles the HTTP GET requests that are directed to a specific     // order using path '/order/<orderId>'.     @http:ResourceConfig {         methods: ["GET"],         path: "/order/{orderId}"     }     findOrder(endpoint client, http:Request req, string orderId) {         // Find the requested order from the map and retrieve it in JSON format.         json? payload = ordersMap[orderId];         http:Response response;         if (payload == null) {             payload = "Order : " + orderId + " cannot be found.";         }          // Set the JSON payload in the outgoing response message.         response.setJsonPayload(untaint payload);          // Send response to the client.         _ = client->respond(response);     }      // Resource that handles the HTTP POST requests that are directed to the path     // '/order' to create a new Order.     @http:ResourceConfig {         methods: ["POST"],         path: "/order"     }     addOrder(endpoint client, http:Request req) {         json orderReq = check req.getJsonPayload();         string orderId = orderReq.Order.ID.toString();         ordersMap[orderId] = orderReq;          // Create response message.         json payload = { status: "Order Created.", orderId: orderId };         http:Response response;         response.setJsonPayload(untaint payload);          // Set 201 Created status code in the response message.         response.statusCode = 201;         // Set 'Location' header in the response message.         // This can be used by the client to locate the newly added order.         response.setHeader("Location", "http://localhost:9090/ordermgt/order/" +                 orderId);          // Send response to the client.         _ = client->respond(response);     }      // Resource that handles the HTTP PUT requests that are directed to the path     // '/order/<orderId>' to update an existing Order.     @http:ResourceConfig {         methods: ["PUT"],         path: "/order/{orderId}"     }     updateOrder(endpoint client, http:Request req, string orderId) {         json updatedOrder = check req.getJsonPayload();          // Find the order that needs to be updated and retrieve it in JSON format.         json existingOrder = ordersMap[orderId];          // Updating existing order with the attributes of the updated order.         if (existingOrder != null) {             existingOrder.Order.Name = updatedOrder.Order.Name;             existingOrder.Order.Description = updatedOrder.Order.Description;             ordersMap[orderId] = existingOrder;         } else {             existingOrder = "Order : " + orderId + " cannot be found.";         }          http:Response response;         // Set the JSON payload to the outgoing response message to the client.         response.setJsonPayload(untaint existingOrder);         // Send response to the client.         _ = client->respond(response);     }      // Resource that handles the HTTP DELETE requests, which are directed to the path     // '/order/<orderId>' to delete an existing Order.     @http:ResourceConfig {         methods: ["DELETE"],         path: "/order/{orderId}"     }     cancelOrder(endpoint client, http:Request req, string orderId) {         http:Response response;         // Remove the requested order from the map.         _ = ordersMap.remove(orderId);          json payload = "Order : " + orderId + " removed.";         // Set a generated payload with order status.         response.setJsonPayload(untaint payload);          // Send response to the client.         _ = client->respond(response);     } }
  • 运行
ballerina run restful_service

  • 测试
post 数据 curl -v -X POST -d \ '{ "Order": { "ID": "100500", "Name": "XYZ", "Description": "Sample order."}}' \ "http://localhost:9090/ordermgt/order" -H "Content-Type:application/json"  get curl -i http://localhost:9090/ordermgt/order/100500

  • 构建(支持docker)
ballerina build restful_service


  • 生成的dockerfile

    ballerina 生成的中间语言是跨平台的

# Auto Generated Dockerfile FROM ballerina/ballerina:0.982.0 LABEL maintainer="dev@ballerina.io" COPY restful_service.balx /home/ballerina  CMD ballerina run restful_service.balx
  • docker 运行
docker run -d -p 9090:9090 dalongrong/restful_service:v1.0
  • 运行流程图

    可以使用vscode 的插件,直接查看,很方便

ballerina 对于开发来说还真的是比较方便,平台的支持也很好,后边会有k8s运行的测试

https://ballerina.io/learn/by-guide/restful-service/

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!