diff --git a/web/api/src/main/java/org/onlab/onos/rest/AbstractWebResource.java b/web/api/src/main/java/org/onlab/onos/rest/AbstractWebResource.java
new file mode 100644
index 0000000..ee9adb0
--- /dev/null
+++ b/web/api/src/main/java/org/onlab/onos/rest/AbstractWebResource.java
@@ -0,0 +1,81 @@
+/*
+ * Copyright 2014 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onlab.onos.rest;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import org.onlab.api.ItemNotFoundException;
+import org.onlab.onos.codec.CodecContext;
+import org.onlab.onos.codec.CodecService;
+import org.onlab.onos.codec.JsonCodec;
+import org.onlab.rest.BaseResource;
+
+/**
+ * Abstract REST resource.
+ */
+public class AbstractWebResource extends BaseResource implements CodecContext {
+
+    @Override
+    public ObjectMapper mapper() {
+        return new ObjectMapper();
+    }
+
+    /**
+     * Returns the JSON codec for the specified entity class.
+     *
+     * @param entityClass entity class
+     * @param <T>         entity type
+     * @return JSON codec
+     */
+    public <T> JsonCodec<T> codec(Class<T> entityClass) {
+        return get(CodecService.class).getCodec(entityClass);
+    }
+
+    /**
+     * Returns JSON object wrapping the array encoding of the specified
+     * collection of items.
+     *
+     * @param codecClass codec item class
+     * @param field      field holding the array
+     * @param items      collection of items to be encoded into array
+     * @param <T>        item type
+     * @return JSON object
+     */
+    protected <T> ObjectNode encodeArray(Class<T> codecClass, String field,
+                                         Iterable<T> items) {
+        ObjectNode result = mapper().createObjectNode();
+        result.set(field, codec(codecClass).encode(items, this));
+        return result;
+    }
+
+    /**
+     * Returns the specified item if that items is null; otherwise throws
+     * not found exception.
+     *
+     * @param item    item to check
+     * @param message not found message
+     * @param <T>     item type
+     * @return item if not null
+     * @throws org.onlab.api.ItemNotFoundException if item is null
+     */
+    protected <T> T nullIsNotFound(T item, String message) {
+        if (item == null) {
+            throw new ItemNotFoundException(message);
+        }
+        return item;
+    }
+
+}
