WalzoneInterview Prep
πŸ“ž Interviewing soon? Practice with a realistic AI mock phone interview β€” it calls you, then scores you. First 15 min FREE β†’

RESTful Web Services Β· Intermediate Β· question 24 of 100

What is the role of filters and interceptors in RESTful web services?

πŸ“• Buy this interview preparation book: 100 RESTful Web Services questions & answers β€” PDF + EPUB for $5

Filters and interceptors are two types of components that can be used in RESTful web services to intercept and manipulate incoming and outgoing requests and responses.

Filters are used to modify the request or response headers, or the content of the request or response, before it is sent or received by the client or server. Filters are commonly used for authentication, authorization, logging, or to add or remove headers.

Interceptors are used to intercept the request or response before it is sent or received by the client or server. Interceptors can be used to add or remove headers, modify the request or response entity, or to perform additional processing on the request or response.

In the JAX-RS framework, filters and interceptors can be implemented using the ContainerRequestFilter, ContainerResponseFilter, ReaderInterceptor, and WriterInterceptor interfaces.

Here is an example of how filters and interceptors can be implemented in a RESTful web service:

    @Provider
    public class LoggingFilter implements ContainerRequestFilter, ContainerResponseFilter {
        private static final Logger LOGGER = Logger.getLogger(LoggingFilter.class.getName());
        
        @Override
        public void filter(ContainerRequestContext requestContext) throws IOException {
            LOGGER.info("Request: " + requestContext.getMethod() + " " + requestContext.getUriInfo().getRequestUri());
        }
        
        @Override
        public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException {
            LOGGER.info("Response: " + responseContext.getStatus());
        }
    }
    
    @Provider
    public class AuthorizationInterceptor implements ReaderInterceptor, WriterInterceptor {
        private static final Logger LOGGER = Logger.getLogger(AuthorizationInterceptor.class.getName());
        
        @Override
        public Object aroundReadFrom(ReaderInterceptorContext context) throws IOException, WebApplicationException {
            String authorizationHeader = context.getHeaders().getFirst("Authorization");
            if (!"secret".equals(authorizationHeader)) {
                LOGGER.warning("Unauthorized access!");
                throw new WebApplicationException(Response.Status.UNAUTHORIZED);
            }
            return context.proceed();
        }
        
        @Override
        public void aroundWriteTo(WriterInterceptorContext context) throws IOException, WebApplicationException {
            // do nothing
        }
    }
    
    @Path("/orders")
    public class OrderResource {
        @GET
        @Produces(MediaType.APPLICATION\_JSON)
        public List<Order> getAllOrders() {
            // implementation
            return orders;
        }
        
        @POST
        @Consumes(MediaType.APPLICATION\_JSON)
        public Response createOrder(Order order) {
            // implementation
            return Response.ok().build();
        }
    }

In this example, two filters and one interceptor are implemented. The LoggingFilter logs the request and response information to the console. The AuthorizationInterceptor checks for the presence of an Authorization header in the request and throws an exception if it is not present or if its value is not secret. The OrderResource class implements the getAllOrders and createOrder methods, which are called by clients to retrieve and create orders.

Filters and interceptors are powerful tools for implementing cross-cutting concerns in RESTful web services, such as authentication, authorization, and logging. They can be used to modify the behavior of the request or response, without modifying the resource itself. However, filters and interceptors can also introduce complexity and reduce the maintainability of the code, so they should be used judiciously.

Reading is step one. Saying it out loud is the interview. Our AI interviewer calls your phone and runs a realistic RESTful Web Services interview β€” then scores it.
πŸ“ž Practice RESTful Web Services β€” free 15 min
πŸ“• Buy this interview preparation book: 100 RESTful Web Services questions & answers β€” PDF + EPUB for $5

All 100 RESTful Web Services questions Β· All topics