একটি স্প্রিং এমভিসি অ্যাপ্লিকেশনে সোয়াগার প্রয়োগের একটি 'সহজ' উপায়


85

আমার কাছে সহজ স্প্রিংয়ে একটি এসইএসটিফুল এপিআই লেখা আছে (কোনও স্প্রিং বুট নেই, অভিনব জিনিস নেই) আমি এটি মধ্যে Swagger বাস্তবায়ন করা উচিত। এখনও অবধি, ইন্টারনেটে প্রতিটি পৃষ্ঠাই আমাকে বিভ্রান্তিকর কনফিগারেশন এবং ফোলা কোড সহ পাগল করে তুলেছে যা আমি মোটেও পোর্টেবল পাই না।

কারও কাছে কি কোনও নমুনা প্রকল্প রয়েছে (বা বিশদ পদক্ষেপের একটি সেট) যা আমাকে এটি সম্পাদন করতে সহায়তা করতে পারে? বিশেষত, আমি একটি ভাল নমুনা খুঁজছি যা সোয়াগার-স্প্রিংমভিসি ব্যবহার করে। আমি জানি এটির 'নমুনা' রয়েছে, তবে সর্বোপরি, গৌণ কোডটি নিরুৎসাহিত করছে।

আমাকে অবশ্যই পরিষ্কার করতে হবে যে আমি "সোয়াগার কেবল সেরা কেন" সন্ধান করছি না। আমি ব্যবহার করছি না (এবং আমার বর্তমান কাজটি ব্যবহার করবে না) স্প্রিং বুট বা এই জাতীয় such


4
নমুনাগুলি দ্বারা, আমি ধরে নিচ্ছি আপনি github.com/adrianbk/swagger-springmvc-demo উল্লেখ করছেন । আমি আপনাকে সোয়াগার-স্প্রিংমভিসি-তে সরাসরি টিকিট খুলতে উত্সাহিত করব কারণ তাদের পক্ষে এটি জেনে রাখা গুরুত্বপূর্ণ যে তাদের সম্ভাব্য ব্যবহারকারীদের মধ্যে কিছু ডক্স অনুভব করতে পারে যাতে তারা এতে উন্নতি করতে পারে।
রন

উত্তর:


122

স্প্রিংফক্স (সোয়াগার স্পেক ২.০, বর্তমান)

স্প্রিংফক্স সোয়াগার-স্প্রিংএমভিসি প্রতিস্থাপন করেছে এবং এখন সোয়াগার স্পেস 1.2 এবং 2.0 উভয় সমর্থন করে। বাস্তবায়ন ক্লাসগুলি পরিবর্তিত হয়েছে, কিছু গভীরতর কাস্টমাইজেশনের অনুমতি দেয় তবে কিছু কাজ করে। ডকুমেন্টেশন উন্নতি হয়েছে, কিন্তু এখনও কিছু কিছু বিবরণ উন্নত কনফিগারেশন জন্য যোগ হবে। 1.2 বাস্তবায়নের জন্য পুরানো উত্তরটি এখনও নীচে পাওয়া যাবে।

মাভেন নির্ভরতা

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.5.0</version>
</dependency> 

খালি-ন্যূনতম বাস্তবায়ন কম-বেশি দেখতে একই দেখাচ্ছে তবে এখন Docketশ্রেণীর পরিবর্তে ক্লাস ব্যবহার করা হচ্ছে SwaggerSpringMvcPlugin:

@Configuration
@EnableSwagger2
public class SwaggerConfig {

    @Bean
    public Docket api(){
        return new Docket(DocumentationType.SWAGGER_2)
            .select()
            .apis(RequestHandlerSelectors.any())
            .paths(PathSelectors.regex("/api/.*"))
            .build()
            .apiInfo(apiInfo());
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
            .title("TITLE")
            .description("DESCRIPTION")
            .version("VERSION")
            .termsOfServiceUrl("http://terms-of-services.url")
            .license("LICENSE")
            .licenseUrl("http://url-to-license.com")
            .build();
    }

}

আপনার সোয়াগার 2.0 এপিআই ডকুমেন্টেশন এখন পাওয়া যাবে http://myapp/v2/api-docs

দ্রষ্টব্য: আপনি যদি স্প্রিং বুট ব্যবহার না করেন তবে আপনার জ্যাকসন-ডাটাবাইন্ড নির্ভরতা যুক্ত করা উচিত। যেহেতু স্প্রিংফক্স ডেটাবাইন্ডিংয়ের জন্য জ্যাকসন ব্যবহার করে।

সোয়াগার ইউআই সমর্থন যুক্ত করা এখন আরও সহজ। আপনি যদি মাভেন ব্যবহার করছেন তবে সোয়াগার ইউআই ওয়েবজারের জন্য নিম্নলিখিত নির্ভরতা যুক্ত করুন:

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.5.0</version>
</dependency>

আপনি যদি স্প্রিং বুট ব্যবহার করছেন, তবে আপনার ওয়েব অ্যাপ্লিকেশনটি স্বয়ংক্রিয়ভাবে প্রয়োজনীয় ফাইলগুলি বেছে নেবে এবং ইউআইটি প্রদর্শন করবে http://myapp/swagger-ui.html(পূর্বে http://myapp/springfox:)। আপনি যদি স্প্রিং বুট ব্যবহার না করে থাকেন, তবে ইউরি-টুমাখা নীচের উত্তরে যেমন উল্লেখ করেছেন, আপনাকে ফাইলগুলির জন্য একটি রিসোর্স হ্যান্ডলার নিবন্ধন করতে হবে। জাভা কনফিগারেশনটি এর মতো দেখাচ্ছে:

@Configuration
@EnableWebMvc
public class WebAppConfig extends WebMvcConfigurerAdapter {

    @Override 
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
    }

}

নতুন স্ট্যাটিক ডকুমেন্টেশন জেনারেশন বৈশিষ্ট্যটিও বেশ সুন্দর দেখাচ্ছে যদিও আমি নিজে চেষ্টা করে দেখিনি।

সোয়াগার-স্প্রিংএমভিসি (সোয়াগার স্পেক 1.2, পুরানো)

সোয়াগার-স্প্রিংএমভিসির ডকুমেন্টেশনটি কিছুটা বিভ্রান্ত হতে পারে তবে এটি সেট আপ করা আসলে অবিশ্বাস্যরকম সহজ। সহজতম কনফিগারেশনের জন্য SpringSwaggerConfigশিম তৈরি করা এবং টিকা-ভিত্তিক কনফিগারেশন সক্ষম করা প্রয়োজন (যা সম্ভবত আপনি আপনার স্প্রিং এমভিসি প্রকল্পে ইতিমধ্যে করেছেন):

<mvc:annotation-driven/>
<bean class="com.mangofactory.swagger.configuration.SpringSwaggerConfig" />

তবে আমি মনে করি SwaggerSpringMvcPluginযে পূর্ববর্তী এক্সএমএল-সংজ্ঞায়িত শিমের পরিবর্তে কাস্টম সোয়াগার কনফিগারেশনটি সংজ্ঞায়িত করার অতিরিক্ত পদক্ষেপ নেওয়া ভাল worth

@Configuration
@EnableSwagger
@EnableWebMvc
public class SwaggerConfig {

    private SpringSwaggerConfig springSwaggerConfig;

    @SuppressWarnings("SpringJavaAutowiringInspection")
    @Autowired
    public void setSpringSwaggerConfig(SpringSwaggerConfig springSwaggerConfig) {
        this.springSwaggerConfig = springSwaggerConfig;
    }

    @Bean
    public SwaggerSpringMvcPlugin customImplementation(){

        return new SwaggerSpringMvcPlugin(this.springSwaggerConfig)
                .apiInfo(apiInfo())
                .includePatterns(".*api.*"); // assuming the API lives at something like http://myapp/api
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
            .title("TITLE")
            .description("DESCRIPTION")
            .version("VERSION")
            .termsOfServiceUrl("http://terms-of-services.url")
            .license("LICENSE")
            .licenseUrl("http://url-to-license.com")
            .build();
    }

}

আপনি যখন নিজের অ্যাপ্লিকেশনটি চালান, আপনার এখন এপিআই স্পেসটি তৈরি হওয়া উচিত http://myapp/api-docs। অভিনব সোয়াগার ইউআই সেট আপ করার জন্য, আপনাকে গিটহাব প্রকল্প থেকে স্ট্যাটিক ফাইলগুলি ক্লোন করে আপনার প্রকল্পে রাখতে হবে। আপনার প্রকল্পটি স্থির এইচটিএমএল ফাইল পরিবেশন করার জন্য কনফিগার করা হয়েছে তা নিশ্চিত করুন:

<mvc:resources mapping="*.html" location="/" />

তারপরে index.htmlসোয়াগার ইউআই distডিরেক্টরি শীর্ষ স্তরের ফাইলটি সম্পাদনা করুন । ফাইলের শীর্ষে, আপনি কিছু জাভাস্ক্রিপ্ট দেখতে পাবেন যা api-docsঅন্য প্রকল্পের ইউআরএলকে বোঝায় । আপনার প্রকল্পের সোয়াগার ডকুমেন্টেশনের দিকে ইঙ্গিত করার জন্য এটি সম্পাদনা করুন:

  if (url && url.length > 1) {
    url = url[1];
  } else {
    url = "http://myapp/api-docs";
  }

এখন আপনি যখন নেভিগেট করবেন http://myapp/path/to/swagger/index.html, আপনার প্রকল্পের জন্য সোয়াগার ইউআই উদাহরণটি দেখতে পাওয়া উচিত।


4
@ মিখাইলবাটার: আমি স্প্রিংফক্সের ম্যাভেন নির্ভরতার সাথে উত্তরটি আপডেট করেছি। আপনি যদি সোয়াগার ইউআই বা স্ট্যাটিক ডকস না চান তবে আপনার প্রকল্পে আপনাকে অন্তর্ভুক্ত করতে হবে এটিই কেবল নির্ভরতা।
ওমেলার 17

4
দেখে মনে হচ্ছে ইউআই url এখন /myapp/swagger-ui.html এবং নয় /
স্প্রিংফক্স

7
সম্পূর্ণতার জন্য: স্প্রিংফক্সে 'রেগেক্স' পদ্ধতিটি 'সোয়াগারকনফিগ' উদাহরণটি 'স্প্রিংফক্স.ডোকমেন্টেশন.বিল্ডার্স।প্যাথসিলেক্টরস.রেজেক্স (স্ট্রিং)' থেকে। যদি তা বুঝতে পেরে আমাকে বেশ খানিকটা সময়
লেগে থাকে

4
PathSelectors.স্থিতিশীল আমদানির সাথে লড়াই করা লোকদের সহায়তা করার জন্য আমি স্বাধীনতা নিয়েছিregex
টিম বাথ

4
লক্ষ্যণীয়: যদি এই নির্দেশাবলীটি হুবহু অনুসরণ করে এবং স্প্রিংবুট ব্যবহার না করে, আপনি মাভেন থেকে প্রাপ্ত স্প্রিংফক্স এবং স্প্রিংফক্স-ইউআই লাইব্রেরির বিভিন্ন সংস্করণের কারণে একটি রানটাইম ত্রুটি পাবেন। পরিবর্তে, সম্ভব হলে উভয়ের সর্বশেষ সংস্করণ দিয়ে শুরু করুন ( 2.5.0যেমন আমি এটি লিখছি)
কিপ

13

স্প্রিংফক্স সোয়াগার ইউআই ওয়েবজার নির্ভরতা এবং রিসোর্স ম্যাপিংগুলি যুক্ত করার পরে আমার জন্য কাজ করে। http://www.webjars.org/ ডকুমেন্টেশন#springmvc

    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.2.2</version>
    </dependency>
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.2.2</version>
    </dependency>
    <dependency>
        <groupId>org.webjars</groupId>
        <artifactId>bootstrap</artifactId>
        <version>3.3.5</version>
    </dependency>

বসন্ত-সার্লেট.এক্সএমএল:

<mvc:resources mapping="swagger-ui.html" location="classpath:/META-INF/resources/"/>
<mvc:resources mapping="/webjars/**" location="classpath:/META-INF/resources/webjars/"/>

বা স্প্রিং অ্যানোটেশন https://github.com/springfox/springfox-demos/blob/master/spring-java-swagger/src/main/java/springfoxdemo/java/swagger/SpringConfig.java

Swagger2 সক্ষম করা উচিত

 @EnableSwagger2
 public class SwaggerConfiguration {
 }

এটি আমাকে অনেক সাহায্য করেছে, তবে আমি /swagger-resourcesখোলার সময় 404 পাচ্ছি swagger-ui.html। কোন টিপস? আরও রিসোর্স ম্যাপিংস হতে পারে?
টিম বাথ

দেখে মনে হচ্ছে সো্যাগার-রিসোর্সগুলি মূল প্রসঙ্গে নেই। এটি ডিস্টিপ্যাচার সার্লেটকে মূল প্রসঙ্গে ম্যাপিং দিয়ে স্থির করা যায়। ইস্যু ফিক্স ইস্যু 983 এবং প্রশ্নটি দেখুন one নন-স্প্রিংবুট অ্যাপ্লিকেশনগুলির জন্য কোনও স্বার-ইউআই কীভাবে কনফিগার করে?
ইউরি তুমাখা

1

আপনি swagger.json উত্পন্ন করতে swagger-maven- প্লাগইন ব্যবহার বিবেচনা করতে পারেন এবং এটি আপনার স্ট্যাটিক swagger-ui এ অনুলিপি করতে পারেন।

দয়া করে এই রেপোতে স্প্রিং এমভিসি টীকা সহ কাজের প্লাগইনের সাধারণ নমুনাটি পরীক্ষা করুন:

https://github.com/khipis/swagger-maven-example

বা জ্যাকস-আরএসের জন্য

https://github.com/kongchen/swagger-maven-example

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.