Discovery, simply put, is the process in which machines learn about how to interact with other machines. When discussing discovery, most people immediately think of a world in which servers find new unknown services and they all just connect and work – like magic. This might be where we are trying to go but it is not what the discussion around discovery is about. Discovery does not answer the request ‘teach me how to talk to you’ but instead ‘which of the languages I know do you understand?’.
Discovering What You Already Know
The first thing to happen when two people meet is they examine each other’s external properties such as skin color or cloths, and then proceed to communicate. The decision on which language to use depends on many factors with locality being the most significant. In the United States, people will approach each other with an English “Hello” or “How are you?,” while in other countries they will attempt using a different language. In some cases locality becomes secondary to external properties when someone’s look implies a different language, for example in some orthodox Jewish communities clothing implies understanding of Yiddish.
Just like people, machines “meet” other machines all the time. While the process is not as random as it is for people, there are many cases in which a machine is introduced to a new resource on the network. On the web, search engine crawlers are machines which constantly find new links, and by following them are introduced to new resources. The process in which machines understand a newly found resource is very similar to how people operate. The external information about the resource is examined – for example its URI informs the machine how to access the resource while its HTTP header provides information on how to read its content.
The goal of a discovery process is to standardize how machines learn more about new found resources, not how they learn to interact with services of unfamiliar properties. Using the people analogy, if a new person we meet greets us with an unfamiliar language, what we “discover” is that we don’t know how to speak to that person. It is unlikely we will be able to learn their language from looking at them or simply listening to them speak.
Without a discovery process, machines must be told about resources ahead of time and will only be able to interact with resources that they already know. This is the same as only starting a conversation with people you already know, even though with little effort you should be able to talk to new people with a common language.
The great promise of open standards is that services will “speak the same language,” allowing machines to interact with them once they discovered they already understand that spoken language. Without it, programmers must hard-coded each resource with manually-discovered properties. In cases where the resource doesn’t even speak any machine-oriented language, developers must use techniques such as screen scraping to interact with the resource.
Continue reading part II: People vs. Machines.