11

サービスに対するテスト データを作成するために、Java で記述したユーティリティ メソッドがいくつかあります。同じユースケースを持っている私の同僚の何人かは、再利用できればクールだと思っていましたが、それぞれ Perl と Python でテストを書いています。そこで、これらのメソッドを公開する JSON REST サービスを立ち上げることを考えています。

Web アプリの作成経験は限られています。自分のサービスを立ち上げて展開する最速の方法は何ですか?

eclipse/spring を使用してそれを行い、ant を Jetty コンテナーにデプロイすることを考えています。しかし、これについてあなたの経験を聞きたいです。また、一部の IDE/プラグインは、一部のテクノロジを他のテクノロジよりも適切にサポートしているようです。ですから、どの IDE/プラグイン + J2EE テクノロジ スタック + サーバー (それが重要な場合) が私のユースケースに適しているか、またその理由をお聞きしたいと思います。私はオープンソースソフトウェアに固執したいと思います。

4

9 に答える 9

12

Maven を使用すると、できるだけ早く起動できると思います。方法は次のとおりです。

JAX-RS ( Java EE 6 の公式部分であるRESTful Web サービス用の Java API ) のRESTEasy実装を使用します。

これは、最低限の構造を持つ Java war Maven プロジェクトです。これらはファイルです:

-pom.xml
-src
 |
  --main
    |
     --java
       |
        --rest
          |
           --HelloResource.java
           --JaxRsActivator.java

以下のように呼びましたsimpleRest。すべてのアーカイブは次のとおりです。

pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                        http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>simpleRest</groupId>
    <artifactId>simpleRest</artifactId>
    <version>1.0</version>
    <packaging>war</packaging>

    <dependencies>
        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-jaxrs</artifactId>
            <version>2.3.1.GA</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
<build>
    <finalName>${project.artifactId}</finalName>
    <plugins>
        <plugin>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.1.1</version>
            <configuration>
                <!-- So maven doesn't require web.xml -->
                <failOnMissingWebXml>false</failOnMissingWebXml>
            </configuration>
        </plugin>
    </plugins>
</build>
</project>

HelloResource.java

package rest;

import java.util.Date;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;

@Path("/hello")
public class HelloResource {
    @GET
    @Produces("text/plain")
    public String helloResource() {
        return "Hello! It's "+new Date();
    }
}

JaxRsActivator.java:

package rest;

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

@ApplicationPath("/rest")
public class JaxRsActivator extends Application {

}

これによりsimpleRest.war(~mvn clean package) が生成されます。新しくインストールしたJBoss AS 7.1.1.Final (デプロイ フォルダーに war ファイルを入れるだけ) またはTomcatにデプロイできます。

その後、URL は期待どおりに利用できます。

http://127.0.0.1:8080/simpleRest/rest/hello

それはどのくらい速いですか?

于 2013-05-22T23:47:06.330 に答える
0

https://stackoverflow.com/a/3891380/1497139の行に沿ってJerseyフレームワークを使用して高速化するには

私たち (BITPlan - 私の会社) は、次のオープン ソース プロジェクトを作成しました。

  1. https://github.com/BITPlan/com.bitplan.simplerest
  2. https://github.com/BITPlan/com.bitplan.simplerest-api
  3. https://github.com/BITPlan/com.bitplan.simplerest-example

設定方法については、以下のコード サンプルを参照してください。

  1. サーバー
  2. 使用する一部のアプリケーション コンテンツ (ユーザー)
  3. コンテンツを公開するリソース (UserResource)
  4. 物事がうまくいくことを示すテストケース

例のテスト

package com.bitplan.simplerest.example;

import static org.junit.Assert.*;

import org.junit.Before;
import org.junit.Test;

import com.bitplan.rest.RestServer;
import com.bitplan.rest.test.TestRestServer;

/**
 * test the example Server
 * @author wf
 *
 */
public class TestExampleServer extends TestRestServer {
  boolean debug=true;
  @Before
  public void initServer() throws Exception {
    startServer();
  }

  @Override
  public RestServer createServer() throws Exception {
    RestServer result = new ExampleServer();
    return result;
  }

  @Test
  public void testExampleServer() throws Exception {
    String userXml=getResponseString("application/xml", "/example/user");
    if (debug)
      System.out.println(userXml);
    String expected="<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><user><name>Doe</name><firstname>John</firstname><email>john@doe.org</email></user>";
    assertEquals(expected,userXml);
    String userJson=getResponseString("application/json", "/example/user");
    if (debug)
      System.out.println(userJson);
    String expectedJson="{\"name\":\"Doe\",\"firstname\":\"John\",\"email\":\"john@doe.org\"}";
    assertEquals(expectedJson,userJson);

  }

}

ExampleServer

package com.bitplan.simplerest.example;

import com.bitplan.rest.RestServerImpl;

/**
 * an Example Server
 * @author wf
 *
 */
public class ExampleServer extends RestServerImpl { 

  /**
   * construct Example Server
   * setting defaults
   * @throws Exception 
   */
  public ExampleServer() throws Exception {
    // listen to whole network
    settings.setHost("0.0.0.0");
    // listen on given port
    settings.setPort(8111);
    // add the default path
    settings.setContextPath("/example");
    // add a static handler
    settings.addClassPathHandler("/", "/static/");
    // setup resources from the given packages
    String packages="com.bitplan.simplerest.example.resources;";
    settings.setPackages(packages);
   }

  /**
   * start Server
   * 
   * @param args
   * @throws Exception
   */
   public static void main(String[] args) throws Exception {
     ExampleServer rs=new ExampleServer();
     rs.settings.parseArguments(args);
     rs.startWebServer();
   } // main

}

ユーザー

package com.bitplan.simplerest.example;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;

/**
 * example class
 */
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class User {
  public String name;
  public String firstname;
  public String email;

}

ユーザー リソース

package com.bitplan.simplerest.example.resources;

import javax.ws.rs.GET;
import javax.ws.rs.Path;

import com.bitplan.simplerest.example.User;


@Path("/user")
public class UserResource {
  @GET
  public User getUser() {
    User user=new User();
    user.name="Doe";
    user.firstname="John";
    user.email="john@doe.org";
    return user;
  }
}
于 2016-06-18T07:33:34.983 に答える
0

REST ベースの Web サービスを作成するには、次のアプローチを提案したいと思います。次の「スクリプト」は、KikahaUndertowを使用して、非常にシンプルで軽量な Web プロジェクトを作成するためのガイドです。以下のアプローチは、Ryan Stewart によって提供された JAXRS ベースの例と非常に似ていますが、Undertow のアーキテクチャーによりパフォーマンスが向上し、フットプリントが小さくなっています (Undertow は非常に高速です)。

  1. Kikaha のコマンド ライン ツールを使用して、スタブ プロジェクトを作成します。

    kikaha project create 2.0 --name=my-app

  2. 上記のコマンドはすぐに使用できるいくつかの REST API クラスを提供しますが、以下に示すように、ビジネス ルールを表す独自のエンティティ クラスを作成できます。

ユーザー.java

import lombok.*;

@Getter
@Setter
public class User {
    @NonNull Long id;
    @NonNull String name;
}
  1. ルート クラスを作成します。メソッドを REST エンドポイントとして公開します。

UserResource.java

import lombok.*;
import kikaha.urouting.api.*;
import javax.inject.*;

@Singleton
@Path("user")
@Consumes( Mimes.JSON )
@Produces( Mimes.JSON )
public class UserResource {

    User savedUser;

    @POST
    public Response saveUser( User user ){
        if ( user.getName().isEmpty() )
            return DefaultResponses.preconditionFailed()
                    .entity("Name is blank");

        savedUser = user;
        return DefaultResponses.ok();
    }

    @GET
    public User getUser(){
        return savedUser;
    }
}
  1. コマンド ラインから 5Mb プロジェクトを実行します。

    キカハランアプリ

免責事項: 私は Kikaha の開発に携わっており、最初のバージョンから多くの Undertow プロジェクトを移植してきました。

于 2015-09-14T12:46:29.367 に答える
0

コンサルタントとして、私は問題を解決することで報酬を受け取ります。Espresso Logic が、JSON/REST API を提供する最速の方法であることがわかりました。Tomcat 基盤で実行され、ローカル、Elastic Beanstalk、または Microsoft Azure に簡単にデプロイできます。すべての主要な SQL データベースに接続し、すべてのテーブル、ビュー、ストアド プロシージャ、およびリレーションシップ (より複雑なドキュメント スタイル リソースを構築するために使用される) のためのインスタント REST API を提供します。管理用の HTML Studio と Node.JS コマンドラインの両方があります。最高の機能は、数式、派生、および検証のための宣言型ロジック (スプレッドシートのような) です。ロジックは、JavaScript と Java プラグイン ライブラリの両方を使用して拡張できます。私は JavaScript ソリューションの作成に時間を費やし、Espresso に REST ページネーション、オプティミスティック ロック、SQL クエリの最適化などの面倒な作業を任せています。マルチテーブル トランザクション ロジック。完全な開示 - 私は彼らを 25 年間知っていますが、これは私が見た中で最高の革新的なテクノロジーです。それをチェックしてください:www.espressologic.com

于 2015-06-14T23:41:53.667 に答える
0

私の会社で目指しているのは、JAX-RS を使用して API を REST サービスとして公開する Apache TomEE サーバーです。セットアップが簡単で、操作も簡単です。

于 2013-05-22T23:43:32.273 に答える
0

jax-ws のリファレンス実装である Jersey の使用経験は豊富です。jax-ws アノテーションをサポートしており、使いやすいです。

于 2013-05-26T14:53:37.343 に答える