The major issue with available Internet of Things platforms that support the communication between Things and their owners is that they view Things as private property. Only the Thing owner can communicate with the Thing to obtain the service or functionality that is provided by the Thing. But this view is short sighted. A Thing should be viewed as a service or a functionality provider. The Thing owner should be able to publish Thing information and make it public. On the other hand, Thing requesters should be able to discover available Things. Then a communication between the Thing and the requester is performed. Our research is concerned with introducing an architecture that supports the publication and discovery of Things in the Internet of Things. This architecture enables Thing owners to publish Thing specification and Thing requesters to find Things that best matches their needs. This paper is concerned with the ranking aspect of our architecture. It introduces a ranking approach for ranking Things that matches requesters requirements. The ranking approach considers the requester functional and nonfunctional requirements, and the context information.