65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 URL 缩短服务 -简介

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.86/5 (6投票s)

2010 年 9 月 19 日

CC (Attr 3U)

5分钟阅读

viewsIcon

81039

这是我们系列文章的第一篇,将介绍如何以编程方式访问 URL 缩短服务。在这里,我们将介绍 REST API 等新概念。我们还将简要讨论 URL 缩短服务的 API 以及如何访问它们。此外,我们将讨论 .NET 对 REST API 的支持,以及在 API 之旅中有助于我们的可用工具和技术。

هذه المقالة متوفرة أيضا باللغة العربية، اقرأها هنا. 

Read more about URL shortening services here.

资源 - Elsheimy.Samples.ShortenSvcs.zip

目录

本文内容
  • 目录
  • 概述
  • 引言
  • 访问 API
  • 身份验证
  • .NET 支持
  • 编码
  • 示例
  • 下一步去哪里
  • 投票:您最喜欢的 URL 缩短服务是什么?

概述

这是我们系列文章的第一篇,将介绍如何以编程方式访问 URL 缩短服务。

在这里,我们将介绍 REST API 等新概念。我们还将简要讨论 URL 缩短服务的 API 以及如何访问它们。

此外,我们将讨论 .NET 对 REST API 的支持,以及在 API 之旅中有助于我们的可用工具和技术。

本文末尾提供了一个使用 C# 和 WinForms 构建的工作示例。

本文是所有其他文章的基础。除本文外的文章将讨论特定的服务及其 API。在其余的文章中,我们将利用此处讨论的代码和技术。

开始吧!

引言

如今,URL 缩短服务非常受欢迎,因为网址往往很长,并且很难通过电子邮件或其他微博客服务(如 Twitter)进行交换。

如今,网络上有数十种 URL 缩短服务。其中大部分列在以下文章中:

在本系列中,我们将讨论如何在 .NET 应用程序中使用 URL 缩短服务。换句话说,我们将讨论如何编写 URL 缩短服务;我们指的是如何以编程方式访问它们。此外,我们将简要讨论每种服务及其独特的功能。

我们将如何进行讨论?这将是一系列定期发布的文章。每篇文章都将讨论以下列表中的一个给定缩短服务(**定期更新,预计将添加新服务**)

以上列表可能不全面,还有许多其他流行的服务。但是,并非所有缩短服务都有 API!上述列表包含了我们*知道*允许开发人员通过公开的 API 使用其功能的缩短服务。

在开始介绍具体服务之前,让我们简要讨论一下 API 的功能以及如何访问它们。

访问 API

网络上的大多数 API 都是 REST (Representational State Transfer) Web 服务。REST Web 服务就是一组函数(HTTP 端点),可用于以各种格式(可选)检索数据。

给定一个端点(函数),例如 http://ab.c/api/shrink,我们可以将所需的输入参数作为查询字符串放在 URL 中。例如,我们可以通过调用 HTTP 端点 http://ab.c/api/shrink?url=www.google.com 来缩短 URL www.google.com,并提供所需信息。值得一提的是,每个服务都有自己的 API 函数和参数。尽管它们都执行相同的操作(缩短 URL),但函数和参数名称有所不同。

调用 Web 函数时,您最终将以该函数使用的格式(XML、Atom、JSON 等)获得结果。函数还可以返回纯文本!这完全取决于您应在调用函数前仔细检查的函数文档。此外,如果函数未成功,返回的值也可能包含错误详细信息。

请记住,API 调用是有限制的,您不能将缩短代码放在无休止的循环中!稍后将讨论特定 API 的其他限制。

身份验证

大多数 URL 缩短服务允许用户在未注册的情况下使用该服务,有些允许用户注册,有些则不允许。许多其他服务要求用户注册才能使用该服务。

同样,服务 API 可能需要也可能不需要用户身份验证。有些服务会给用户一个 API 密钥,可用于身份验证过程。其他服务要求用户在 API 调用中输入其登录详细信息。大多数使用 API 密钥方法。

.NET 支持

.NET 是否支持 REST API?当然!只要 REST Web 服务就是 HTTP 端点的集合,我们就无需担心从 .NET 访问它们,因为 BCL 为我们提供了许多类(可在 System.dll 中找到),可以帮助处理 HTTP 请求和响应。

此外,我们将大量依赖 System.Xml.dll 中的类来处理从函数返回的数据(我们将利用支持 XML 的函数)。

如果我们能用 C# 编写一个调用我们伪造的 Web 函数 http://ab.c/api/shrink 的代码,那么我们可能会得到类似这样的代码:

// C#

public void string Shorten(string url)
{
    string reqUri = @"http://ab.c/api/shrink?url=" + url;

    WebRequest req = WebRequest.Create(reqUri);
    req.Timeout = 5000;

    XmlDocument doc = new XmlDocument();
    doc.Load(req.GetResponse().GetResponseStream());

    return HandleXml(doc);
}
' VB.NET

Function Shorten(ByVal url As String) As String

    Dim reqUri As String = "http://ab.c/api/shrink?url=" & url

    Dim req As WebRequest = WebRequest.Create(reqUri)
    req.Timeout = 5000

    Dim doc As new XmlDocument()
    doc.Load(req.GetResponse().GetResponseStream())

    Return HandleXml(doc)

End Function

编码

如果要缩短的 URL 包含特殊字符,如 '&'、'?'、'#' 或空格,则应在将 URL 发送给缩短函数之前先处理这些字符。

这种 URL 的特殊处理通常称为**百分比编码**或**URL 编码**。此编码会将不安全字符替换为其十六进制值,前面带有百分比('%')符号。

有许多不安全字符应进行百分比编码,包括 '$'、'+'、'&'、':' 和 '='。在 Brian Wilson 的文章 URL Encoding 中可以找到对 URL 编码的精彩讨论。

为什么不安全字符有问题?考虑以下示例:我们需要使用我们伪造的缩短服务 http://ab.c 来缩短 URL http://justlikeamagic.com/?s=twitter,最终调用的函数地址是 http://ab.c/api/shrink?url=http://justlikeamagic.com/?s=twitter。现在我们有两个“?”了!!!

那么我们如何编码 URL 呢?只需使用 System.Net.Uri 类的 EscapeUriString() 函数,这 suffices for us now。

示例

示例应用程序的下载链接将在几天后提供,一旦我们发布其他文章。:)

下一步去哪里

现在,开始使用您喜欢的任何缩短服务(**链接会定期更新,也会提供新服务**)

或者,查看我们的 **URL 缩短服务标签**。
© . All rights reserved.