If I have a URL that represents a collection, is there a good way to describe filters?
e.g. http://example.com/comic_books?after=2001-01-01&before=2002-03-09
If I make these filters part of the service contract, aren’t I violating the idea of hypermedia as the engine of application state?
Do I need to have another resource that links to my collection and describes the filters e.g. via an HTML form?
You can consider an HTML form as a URL template representing your resource and the filter, there’s nothing wrong with that, we all do it every day (google.com?s=query). There are those that argue that you don’t need a form to represent a URL template, that documentation alone is adequate, so for many the form itself is optional.
The hyper media aspect is mostly related to the presence of the links themselves. Documenting the service is not an “out of band” consideration. What you want though is to present the link options as part of the hyper media that the client can follow. The form can be nice, but it’s not required. You can use (even require) the same link and query parameters for the filter without explicitly listing them as part of the payload.
Consider HAL as an alternative to HTML, and it has no concept of forms, yet is consider by many to be a fine hyper media compatible media type.