# Services
Both OpenStack and Rackspace are comprised of different services: Compute (Nova),
Object Storage (Swift), Queues (Marconi), etc. Each of these services is
encapsulated in its own class which implements the
`OpenCloud\Common\Service\ServiceInterface` interface.
Each service class is nested in its own namespace:
Service|OpenStack codename|FQCN
---|---|---
Compute|Nova|`OpenCloud\Compute\Service`
Object Storage|Swift|`OpenCloud\ObjectStore\Service`
Identity|Keystone|`OpenCloud\Identity\Service`
Queues|Marconi|`OpenCloud\Queues\Service`
## Instantiating a service
The easiest way to instantiate a service, is using the convenient factory
methods of the client class. For more information about clients, see the
[client documentation](Clients.md).
To create a Compute service, for example:
```php
$service = $client->computeService('cloudServersOpenStack', 'DFW');
```
### Method arguments
As you will notice, each factory method accepts three arguments:
Position|Name|Required?|Type|Description
---|---|---|---|---
1|Service name|Yes|string|The name of the service as it appears in the [Service Catalog](https://github.com/rackspace/php-opencloud/blob/master/docs/userguide/Clients.md#service-catalog)
2|Region|Yes|string|The region you want your service to operate in
3|URL type|No|enum|Each service has two different URL types for API transactions: a public URL (i.e. over the Internet) and a private URL (through Rackspace's private network). Private URL's are beneficial because they have lower latency and incur no bandwidth charges; the only condition is that you are communicating to the API from the **same geographic region** (i.e. from a Cloud Serve in the same region).
The accepted options you may pass in are either `OpenCloud\Common\Constants\Service::INTERNAL_URL` or `OpenCloud\Common\Constants\Service::PUBLIC_URL`.
## Differences between OpenStack and Rackspace
Not all of Rackspace's services are supported by OpenStack; examples include:
Cloud Databases, Auto Scale, Load Balancers, DNS, etc.
For this reason, if you want to use or interact with these Rackspace-only
services, you must do so by using the methods of the `OpenCloud\Rackspace`
client object and **not** the `OpenCloud\OpenStack` client.