AI-generated Key Takeaways
-
A skeleton REST server for API v3 Booking server based on google-protobuf and Jersey RESTful Web Services is available for download.
-
The prerequisites for this server include Apache Maven, Protocol compiler for java, and Apache Tomcat.
-
The setup process involves copying proto interfaces, creating a web application project with Maven support, adding dependencies, auto-generating source files, incorporating sample code, configuring the servlet, and running the server on Tomcat.
-
The final directory structure for the server project includes source files for REST services, authentication, models, and proto files.
You can download our skeleton REST server by cloning the repo
git clone https://maps-booking.googlesource.com/java-maps-booking-rest-server-v3-skeleton
Introduction
This is a reference implementation for API v3 Booking server based on:
Prerequisites
Require installations of
Get Started
- Copy the Proto Interface into a proto file (api_v3.proto). Modify
the package to match your project (com.partner.mapsbooking.v3.model).
- If implementing waitlist functionality, repeat the same steps with the Waitlist Proto Interface
- Create a web application project in your IDE named booking_server_v3, add Maven support to this project.
- Place your proto file under the src/main/resources, add
dependencies for Jersey and protocol buffers runtime to the Maven
pom.xml file:
<dependencyManagement> <dependencies> <dependency> <groupId>org.glassfish.jersey</groupId> <artifactId>jersey-bom</artifactId> <version>${jersey.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.glassfish.jersey.containers</groupId> <artifactId>jersey-container-servlet-core</artifactId> </dependency> <dependency> <groupId>org.glassfish.jersey.media</groupId> <artifactId>jersey-media-json-jackson</artifactId> <version>2.27</version> </dependency> <dependency> <groupId>com.google.protobuf</groupId> <artifactId>protobuf-java</artifactId> <version>3.5.1</version> </dependency> <dependency> <groupId>io.grpc</groupId> <artifactId>grpc-protobuf</artifactId> <version>1.11.0</version> </dependency> </dependencies> <properties> <java.version>1.8</java.version> <jersey.version>2.23.2</jersey.version> </properties>
-
Execute the following command under src/main to auto-generate a source file for the classes defined in the proto file:
protoc --java_out=java resources/api_v3.proto
- If implementing waitlist functionality, also execute the following: protoc --java_out=java resources/waitlist.proto
-
Inside of the src/main/java, create a new package matching your groupId (com.partner.mapsbooking). Retrieve the sample code from the repo:
git clone https://maps-booking.googlesource.com/java-maps-booking-rest-server-v3-skeleton
place the files under your package, follow the TODOs to complete your implementation.
- Configure your servlet by modifying the web.xml file:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <servlet> <servlet-name>Booking Rest Server</servlet-name> <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> <init-param> <param-name>jersey.config.server.provider.packages</param-name> <param-value>com.partner.mapsbooking</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Booking Rest Server</servlet-name> <url-pattern>/mapsbooking/*</url-pattern> </servlet-mapping> </web-app>
- In the Run Configurations, set up a Tomcat server configuration. Add all the jars to the /WEB_INF/lib directory (project structure -> artifacts -> After selecting all jars right click and choose "Put into /WEB-INF/lib").
- Run Tomcat to start your server.
Final Directory Structure
src |---main |---java |---com.partner.mapsbooking |---rest |---BookingService.java |---BookingExceptionMapper.java |---Error.java |---authentication |---AuthenticationService.java |---RestAuthenticationFilter.java |---v3.model |---ApiV3.java |---Waitlist.java |---resources |---api_v3.proto |---waitlist.proto |---test