Ballerina is a general purpose, concurrent and strongly typed programming language with both textual and graphical syntaxes, optimized for integration. In this post we will discuss how we can use ballerina swagger connector development tool to develop connector using already designed swagger API.
First download zip file content and unzip it into your local machine. Also you need to download ballerina composer and run time from the ballerinalang web site to try this.
First download zip file content and unzip it into your local machine. Also you need to download ballerina composer and run time from the ballerinalang web site to try this.
Now we need to start back end for generated connector.
Goto student-msf4j-server directory and build it.
/swagger-connector-demo/student-msf4j-server>> mvn clean install
|
Now you will see micro service jar file generated. Then run MSF4J service using following command.
/swagger-connector-demo/student-msf4j-server>> java -jar target/swagger-jaxrs-server-1.0.0.jar
starting Micro Services
2017-02-19 21:37:44 INFO MicroservicesRegistry:55 - Added microservice: io.swagger.api.StudentsApi@25f38edc
2017-02-19 21:37:44 INFO MicroservicesRegistry:55 - Added microservice: org.wso2.msf4j.internal.swagger.SwaggerDefinitionService@17d99928
2017-02-19 21:37:44 INFO NettyListener:68 - Starting Netty Http Transport Listener
2017-02-19 21:37:44 INFO NettyListener:110 - Netty Listener starting on port 8080
2017-02-19 21:37:44 INFO MicroservicesRunner:163 - Microservices server started in 307ms
|
Now we can check MSF4J service running or not using CuRL as follows.
curl -v http://127.0.0.1:8080/students
* Trying 127.0.0.1...
* Connected to 127.0.0.1 (127.0.0.1) port 8080 (#0)
> GET /students HTTP/1.1
> Host: 127.0.0.1:8080
> User-Agent: curl/7.43.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Connection: keep-alive
< Content-Length: 41
< Content-Type: application/json
<
* Connection #0 to host 127.0.0.1 left intact
{"code":4,"type":"ok","message":"magic!"}
|
Please use following sample swagger definition to generate connector(this is available in zip file attached).
swagger: '2.0'
info:
version: '1.0.0'
title: Swagger School (Simple)
description: A sample API that uses a school as an example to demonstrate features in the swagger-2.0 specification
termsOfService: http://helloreverb.com/terms/
contact:
name: Swagger API team
email: foo@example.com
url: http://swagger.io
license:
name: MIT
url: http://opensource.org/licenses/MIT
host: schol.swagger.io
basePath: /api
schemes:
- http
consumes:
- application/json
produces:
- application/json
paths:
/students:
get:
description: Returns all students from the system that the user has access to
operationId: findstudents
produces:
- application/json
- application/xml
- text/xml
- text/html
parameters:
- name: limit
in: query
description: maximum number of results to return
required: false
type: integer
format: int32
responses:
'200':
description: student response
schema:
type: array
items:
$ref: '#/definitions/student'
default:
description: unexpected error
schema:
$ref: '#/definitions/errorModel'
post:
description: Creates a new student in the school. Duplicates are allowed
operationId: addstudent
produces:
- application/json
parameters:
- name: student
in: body
description: student to add to the school
required: true
schema:
$ref: '#/definitions/newstudent'
responses:
'200':
description: student response
schema:
$ref: '#/definitions/student'
default:
description: unexpected error
schema:
$ref: '#/definitions/errorModel'
/students/{id}}:
get:
description: Returns a user based on a single ID, if the user does not have access to the student
operationId: findstudentById
produces:
- application/json
- application/xml
- text/xml
- text/html
parameters:
- name: id
in: path
description: ID of student to fetch
required: true
type: integer
format: int64
- name: ids
in: query
description: ID of student to fetch
required: false
type: integer
format: int64
responses:
'200':
description: student response
schema:
$ref: '#/definitions/student'
default:
description: unexpected error
schema:
$ref: '#/definitions/errorModel'
delete:
description: deletes a single student based on the ID supplied
operationId: deletestudent
parameters:
- name: id
in: path
description: ID of student to delete
required: true
type: integer
format: int64
responses:
'204':
description: student deleted
default:
description: unexpected error
schema:
$ref: '#/definitions/errorModel'
definitions:
student:
type: object
required:
- id
- name
properties:
id:
type: integer
format: int64
name:
type: string
tag:
type: string
newstudent:
type: object
required:
- name
properties:
id:
type: integer
format: int64
name:
type: string
tag:
type: string
errorModel:
type: object
required:
- code
- textMessage
properties:
code:
type: integer
format: int32
textMessage:
type: string
|
./ballerina swagger connector /home/sanjeewa/Desktop/sample.
import ballerina.net.http;
@http:BasePath("/testService")
service echo {
@http:POST
resource echo(message m) {
Default defaultConnector = create Default();
message response1 = Default.employeeIDGet( defaultConnector, m);
reply response1;
}
}
connector Default() {
http:ClientConnector endpoint = create http:ClientConnector("http://127.0.0.1:8080/students");
action employeeIDDelete(Default c, message msg)(message ) {
message response;
response = http:ClientConnector.delete(endpoint, http:getRequestURL(msg), msg);
return response;
}
action employeeIDGet(Default c, message msg)(message ) {
message response;
response = http:ClientConnector.get(endpoint, http:getRequestURL(msg), msg);
return response;
}
action employeeIDPut(Default c, message msg)(message ) {
message response;
response = http:ClientConnector.put(endpoint, http:getRequestURL(msg), msg);
return response;
}
action rootGet(Default c, message msg)(message ) {
message response;
response = http:ClientConnector.get(endpoint, http:getRequestURL(msg), msg);
return response;
}
action rootPost(Default c, message msg)(message ) {
message response;
response = http:ClientConnector.post(endpoint, http:getRequestURL(msg), msg);
return response;
}
}
Then you will see relevant files in output directory.
├── test
└── org
└── wso2
├── default.bal
├── LICENSE
├── README.md
└── types.jsonThen you can copy generated connector code into composer and start your service development. How its appear in composer source view.
How its loaded in composer UI.
Then run it.
./ballerina run service ./testbal.bal
Now invoke ballerina service as follows.
curl -v -X POST http://127.0.0.1:9090/ testService
* Trying 127.0.0.1...
* Connected to 127.0.0.1 (127.0.0.1) port 9090 (#0)
> POST /testService HTTP/1.1
> Host: 127.0.0.1:9090
> User-Agent: curl/7.43.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Connection: keep-alive
< Content-Length: 49
< Content-Type: application/json
<
* Connection #0 to host 127.0.0.1 left intact
{"code":4,"type":"ok"," message":"test-ballerina"}
curl -v -X POST http://127.0.0.1:9090/
* Trying 127.0.0.1...
* Connected to 127.0.0.1 (127.0.0.1) port 9090 (#0)
> POST /testService HTTP/1.1
> Host: 127.0.0.1:9090
> User-Agent: curl/7.43.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Connection: keep-alive
< Content-Length: 49
< Content-Type: application/json
<
* Connection #0 to host 127.0.0.1 left intact
{"code":4,"type":"ok","
No comments:
Post a Comment