Add checking that parameters passed in conform the pattern supplied in the discovery document, if supplied.
diff --git a/apiclient/discovery.py b/apiclient/discovery.py
index 71e901b..7d884af 100644
--- a/apiclient/discovery.py
+++ b/apiclient/discovery.py
@@ -150,7 +150,16 @@
     pathUrl = re.sub(r'\{', r'{+', pathUrl)
     httpMethod = methodDesc['httpMethod']
     args = methodDesc['parameters'].keys()
-    required = [arg for arg in args if methodDesc['parameters'][arg].get('required', True)]
+
+    required = [] # Required parameters
+    pattern = {}  # Parameters the must match a regex
+    for arg, desc in methodDesc['parameters'].iteritems():
+      param = key2param(arg)
+      if desc.get('pattern', ''):
+        pattern[param] = desc['pattern']
+      if desc.get('required', False):
+        required.append(param)
+
     if httpMethod in ['PUT', 'POST']:
       args.append('body')
     argmap = dict([(key2param(key), key) for key in args])
@@ -159,20 +168,30 @@
       for name in kwargs.iterkeys():
         if name not in argmap:
           raise TypeError('Got an unexpected keyword argument "%s"' % name)
-      params = dict(
-          [(argmap[key], value) for key, value in kwargs.iteritems()]
-          )
+
       for name in required:
         if name not in kwargs:
           raise TypeError('Missing required parameter "%s"' % name)
+
+      for name, regex in pattern.iteritems():
+        if name in kwargs:
+          if re.match(regex, kwargs[name]) is None:
+            raise TypeError('Parameter "%s" value "%s" does match the pattern "%s"' % (name, kwargs[name], regex))
+
+      params = {}
+      for key, value in kwargs.iteritems():
+        params[argmap[key]] = value
+
       headers = {}
       headers, params, query, body = self._model.request(headers, params)
 
       url = urlparse.urljoin(self._baseUrl,
           uritemplate.expand(pathUrl, params) + query)
 
-      return self._model.response(*self._http.request(
-        url, method=httpMethod, headers=headers, body=body))
+      resp, content = self._http.request(
+          url, method=httpMethod, headers=headers, body=body)
+
+      return self._model.response(resp, content)
 
     docs = ['A description of how to use this function\n\n']
     for arg in argmap.iterkeys():