API wrapper: create the notification.

        See:
        https://cloud.google.com/storage/docs/json_api/v1/notifications/insert

        If :attr:`user_project` is set on the bucket, bills the API request
        to that project.

        :type client: :class:`~google.cloud.storage.client.Client`
        :param client: (Optional) the client to use.  If not passed, falls back
                       to the ``client`` stored on the notification's bucket.

def create(self, client=None):
        """API wrapper: create the notification.

        See:
        https://cloud.google.com/storage/docs/json_api/v1/notifications/insert

        If :attr:`user_project` is set on the bucket, bills the API request
        to that project.

        :type client: :class:`~google.cloud.storage.client.Client`
        :param client: (Optional) the client to use.  If not passed, falls back
                       to the ``client`` stored on the notification's bucket.
        """
        if self.notification_id is not None:
            raise ValueError(
                "Notification already exists w/ id: {}".format(self.notification_id)
            )

        client = self._require_client(client)

        query_params = {}
        if self.bucket.user_project is not None:
            query_params["userProject"] = self.bucket.user_project

        path = "/b/{}/notificationConfigs".format(self.bucket.name)
        properties = self._properties.copy()
        properties["topic"] = _TOPIC_REF_FMT.format(self.topic_project, self.topic_name)
        self._properties = client._connection.api_request(
            method="POST", path=path, query_params=query_params, data=properties
        )