how to get uri req res body from a yaml by swagger parser

戏子无情 提交于 2019-12-12 19:07:03

问题


I want to get uri, request, response body, response code from a swagger yaml file.

Then I can put them into my own database. Like this:

I tried to do something by adding io.swagger.parser.SwaggerParser in a java program. I think the way swagger codegen does it is the right solution. But I can't get anything from the source code of codegen.


This question is about parsing the yaml file and get the structure. Next question: How to get request body and response body in JSON from a Swagger yaml


回答1:


The easiest way is to use a parser to parse the specification file. Then you can iterate over the elements you are interested in and do what ever you want.

If your specification input is in the Swagger 2.0 format (json or yaml), you can use this parser:

<dependency>
    <groupId>io.swagger</groupId>
    <artifactId>swagger-parser</artifactId>
    <version>1.0.34</version>
</dependency>

Here an example method:

import java.util.Map;

import io.swagger.models.HttpMethod;
import io.swagger.models.Operation;
import io.swagger.models.Path;
import io.swagger.models.Response;
import io.swagger.models.Swagger;
import io.swagger.models.parameters.Parameter;
import io.swagger.parser.SwaggerParser;

public class UseParserExample {

  public static void main(String[] args) {
    Swagger swagger = new SwaggerParser().read("<path to your specification>");
    Map<String, Path> paths = swagger.getPaths();
    for (Map.Entry<String, Path> p : paths.entrySet()) {
      Path path = p.getValue();
      Map<HttpMethod, Operation> operations = path.getOperationMap();
      for (Entry<HttpMethod, Operation> o : operations.entrySet()) {
        System.out.println("===");
        System.out.println("PATH:" + p.getKey());
        System.out.println("Http method:" + o.getKey());
        System.out.println("Summary:" + o.getValue().getSummary());
        System.out.println("Parameters number: " + o.getValue().getParameters().size());
        for (Parameter parameter : o.getValue().getParameters()) {
          System.out.println(" - " + parameter.getName());
        }
        System.out.println("Responses:");
        for (Map.Entry<String, Response> r : o.getValue().getResponses().entrySet()) {
          System.out.println(" - " + r.getKey() + ": " + r.getValue().getDescription());
        }
        System.out.println("");
      }

    }
  }
} 

Here an ouput example:

PATH: /user/{username}
Http method: PUT
Summary: Updated user
Parameters number: 2
 - username
 - body
Responses:
 - 400: Invalid user supplied
 - 404: User not found

===
PATH: /user/{username}
Http method: DELETE
Summary: Delete user
Parameters number: 1
 - username
Responses:
 - 400: Invalid username supplied
 - 404: User not found


来源:https://stackoverflow.com/questions/49142700/how-to-get-uri-req-res-body-from-a-yaml-by-swagger-parser

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