怎么为自己的网站编写api接口

怎么为自己的网站编写api接口,第1张

80%的都用webservice 新浪微博API(java版) ============================ 修改事项: 1、接口返回结果采用json对象方式封装 2、修改WeiboResponse中空字符串("")调用判断的bug 3、修改了JSONObject中返回空对象的问题 4、增加了直接文件上传接口直接 常用接口实例: (使用前先修改 Weibo.java 中 public static final String CONSUMER_KEY = ""public static final String CONSUMER_SECRET = ""填写成实际申请的 CONSUMER_KEY 及 CONSUMER_SECRET) 1、获取最新公共微博列表 参考:weibo4j.examples.GetTimelines 中的getPublicTimeline()部分 2、发表微博 参考:weibo4j.examples.Update 中的updateStatus(...)部分 3、发表评论 参考:weibo4j.examples.Update 中的updateComment(...)部分 4、删除评论 参考:weibo4j.examples.Update 中的destroyComment(...)部分 5、发送私人消息 参考:weibo4j.examples.DirectMessage 类 6、发表带图片的微博 参考:weibo4j.examples.OAuthUploadByFile 中的uploadStatus(status,file)部分 7、更新用户头像 参考:weibo4j.examples.OAuthUpdateProfile类 8、OAuth桌面应用访问 步骤: 1>在weibo4j.examples.OAuthUpdate 访问认证的URL,得到pin 2>在weibo4j.examples.OAuthUpdate 输入pin,然后得到AccessToken 3>即可访问用户的微博,参考:weibo4j.examples.OAuthUpdateTwo 9、OAuth WEB应用访问 步骤: 1>在weibo4j.examples.WebOAuth 带backurl参数请求OAuth认证,获得RequestToken 2>在callback 的地址里面,接受到oauth_verifier参数,然后再发一次请求,即可获得AccessToken 3>用AccessToken访问用户的微博 实例说明: 在web目录下面有两个jsp页面: call.jsp 是发送request的请求,在第九行的参数“http://localhost:8080/callback.jsp”是回调地址 当获取成功后将RequestToken置入session,并重定向到用户认证地址 callback.jsp 接收到oauth_verifier参数,从session里面拿到RequestToken,再请求获取AccessToken 获取到后即可对用户微博进行 *** 作,本例中是发表微博 测试环境: 本例中可以将call.jsp和 callback.jsp直接放到tomcat的根目录下面:webapps\ROOT 并将实例项目编译好的classes文件和lib目录拷贝到ROOT\WEB-INF下面 重启tomcat,访问http://localhost:8080/call.jsp?opt=1 注:也可以打成war包,但注意call.jsp里面的callback参数需要做相应修改 ============================================================================= 其他接口在weibo4j.Weibo类中定义,调用方式请参考weibo4j.examples,下面是完整的接口列表: 获取下行数据集(timeline)接口 方法名: statuses/public_timeline 最新公共微博 方法名:getPublicTimeline statuses/friends_timeline 最新关注人微博 (别名: statuses/home_timeline) 方法名:getFriendsTimeline statuses/user_timeline 用户发表微博列表 方法名:getUserTimeline(String id, Paging paging) statuses/mentions 最新 @用户的 方法名: getMentions() statuses/comments 单条评论列表(按微博) 方法名:getComments() 微博访问接口 statuses/show 获取单条 方法名:showStatus(long id) statuses/update 发表微博 方法名:updateStatus(String status) statuses/upload 发表微博及图片 方法名:uploadStatus(String status,File file) statuses/destroy 删除 方法名: destroyStatus(long statusId) statuses/comment 评论 方法名: destroyComment(long commentId) statuses/comment_destroy 删除评论 方法名:destroyComment 私信接口 direct_messages 我的私信列表 方法名:getDirectMessages() 分页 getDirectMessages(Paging paging) direct_messages/sent 我发送的私信列表 方法名:getSentDirectMessages() direct_messages/new 发送私信 方法名:sendDirectMessage(String id,String text) direct_messages/destroy 删除一条私信 方法名:destroyDirectMessage(int id) 关注接口 friendships/create 关注某用户 方法名:createFriendship(String id)或 createFriendship(String id, boolean follow) friendships/destroy 取消关注 方法名: destroyFriendship(String id) friendships/exists 是否关注某用户 方法名:existsFriendship(String userA, String userB) friends/ids 关注列表 方法名: getFriendsIDs(long cursor) followers/ids 粉丝列表 方法名:getFollowersIDs(long cursor) 账号接口 account/verify_credentials 验证身份是否合法 方法名:verifyCredentials() account/rate_limit_status 查看当前频率限制 方法名:rateLimitStatus() account/update_profile_image 更改头像 方法名:updateProfileImage(File image) account/update_profile 更改资料 方法名:User updateProfile(String name, String email, String url, String location, String description) 收藏接口 favorites 收藏列表 方法名:getFavorites() favorites/create 添加收藏 方法名:createFavorite(long id) favorites/destroy 删除收藏 方法名:destroyFavorite(long id)

采纳哦

根据你的描述明显应该是放在 web.php 中。

因为你只是普通的 web 项目,web.php 中的路由使用了 web middleware group 。

protected $middlewareGroups = [

'web' =>[

\App\Http\Middleware\EncryptCookies::class,

\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,

\Illuminate\Session\Middleware\StartSession::class,

\Illuminate\View\Middleware\ShareErrorsFromSession::class,

\App\Http\Middleware\VerifyCsrfToken::class,

\Illuminate\Routing\Middleware\SubstituteBindings::class,

],

'api' =>[

'throttle:60,1',

'bindings',

],

]

如果你把 ajax 的路由放在 api.php 中,没有csrf 保护,很容易造成程序上的漏洞,公共资源请求除外。

api.php 配合Laravel passport 来使用提供 API 服务。

1.1 SwaggerUI

SwaggerUI 是一个简单的Restful API 测试和文档工具。简单、漂亮、易用(官方demo)。通过读取JSON 配置显示API. 项目本身仅仅也只依赖一些 html,css.js静态文件. 你可以几乎放在任何Web容器上使用。

1.2 Swashbuckle

Swashbuckle 是.NET类库,可以将WebAPI所有开放的控制器方法生成对应SwaggerUI的JSON配置。再通过SwaggerUI 显示出来。类库中已经包含SwaggerUI 。所以不需要额外安装。

2.快速开始

创建项目 OnlineAPI来封装百度音乐服务(示例下载) ,通过API可以搜索、获取音乐的信息和播放连接。

我尽量删除一些我们demo中不会用到的一些文件,使其看上去比较简洁。

WebAPI 安装 Swashbuckle

Install-Package Swashbuckle

代码注释生成文档说明。

Swashbuckle 是通过生成的XML文件来读取注释的,生成 SwaggerUI,JSON 配置中的说明的。

安装时会在项目目录 App_Start 文件夹下生成一个 SwaggerConfig.cs 配置文件,用于配置 SwaggerUI 相关展示行为的。如图:

将配置文件大概99行注释去掉并修改为

c.IncludeXmlComments(GetXmlCommentsPath(thisAssembly.GetName().Name))

并在当前类中添加一个方法

/// <summary>

/// </summary>

/// <param name="name"></param>

/// <returns></returns>

protected static string GetXmlCommentsPath(string name)

{

return string.Format(@"{0}\bin\{1}.XML", AppDomain.CurrentDomain.BaseDirectory, name)

}

紧接着你在此Web项目属性生成选卡中勾选 “XML 文档文件”,编译过程中生成类库的注释文件

添加百度音乐 3个API

访问 http://<youhost>/swagger/ui/index,最终显示效果

我们通过API 测试API 是否成功运行

3.添加自定义HTTP Header

在开发移动端 API时常常需要验证权限,验证参数放在Http请求头中是再好不过了。WebAPI配合过滤器验证权限即可

首先我们需要创建一个 IOperationFilter 接口的类。IOperationFilter

using System

using System.Collections.Generic

using System.Linq

using System.Web

using System.Web.Http

using System.Web.Http.Description

using System.Web.Http.Filters

using Swashbuckle.Swagger

namespace OnlineAPI.Utility

{

public class HttpHeaderFilter : IOperationFilter

{

public void Apply(Operation operation, SchemaRegistry

schemaRegistry, ApiDescription apiDescription)

{

if (operation.parameters == null) operation.parameters = new

List<Parameter>()

var filterPipeline =

apiDescription.ActionDescriptor.GetFilterPipeline()

//判断是否添加权限过滤器

var isAuthorized = filterPipeline.Select(filterInfo =>

filterInfo.Instance).Any(filter =>filter is IAuthorizationFilter)

//判断是否允许匿名方法

var allowAnonymous =

apiDescription.ActionDescriptor.GetCustomAttributes<AllowAnonymousAttribute>().Any()

if (isAuthorized &&!allowAnonymous)

{

operation.parameters.Add(new Parameter

{

name = "access-key",

@in = "header",

description = "用户访问Key",

required = false,

type = "string"

})

}

}

}

}

在 SwaggerConfig.cs 的 EnableSwagger 配置匿名方法类添加一行注册代码

c.OperationFilter<HttpHeaderFilter>()

添加Web权限过滤器

using System

using System.Collections.Generic

using System.Linq

using System.Net

using System.Net.Http

using System.Text

using System.Web

using System.Web.Http

using System.Web.Http.Controllers

using Newtonsoft.Json

namespace OnlineAPI.Utility

{

/// <summary>

///

/// </summary>

public class AccessKeyAttribute : AuthorizeAttribute

{

/// <summary>

/// 权限验证

/// </summary>

/// <param name="actionContext"></param>

/// <returns></returns>

protected override bool IsAuthorized(HttpActionContext actionContext)

{

var request = actionContext.Request

if (request.Headers.Contains("access-key"))

{

var accessKey = request.Headers.GetValues("access-key").SingleOrDefault()

//TODO 验证Key

return accessKey == "123456789"

}

return false

}

/// <summary>

/// 处理未授权的请求

/// </summary>

/// <param name="actionContext"></param>

protected override void HandleUnauthorizedRequest(HttpActionContext actionContext)

{

var content = JsonConvert.SerializeObject(new {State = HttpStatusCode.Unauthorized})

actionContext.Response = new HttpResponseMessage

{

Content = new StringContent(content, Encoding.UTF8, "application/json"),

StatusCode = HttpStatusCode.Unauthorized

}

}

}

}

在你想要的ApiController 或者是 Action 添加过滤器

[AccessKey]

最终显示效果

4.显示上传文件参数

SwaggerUI 有上传文件的功能和添加自定义HTTP Header 做法类似,只是我们通过特殊的设置来标示API具有上传文件的功能

using System

using System.Collections.Generic

using System.Linq

using System.Web

using System.Web.Http.Description

using Swashbuckle.Swagger

namespace OnlineAPI.Utility

{

/// <summary>

///

/// </summary>

public class UploadFilter : IOperationFilter

{

/// <summary>

/// 文件上传

/// </summary>

/// <param name="operation"></param>

/// <param name="schemaRegistry"></param>

/// <param name="apiDescription"></param>

public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription)

{

if (!string.IsNullOrWhiteSpace(operation.summary) &&operation.summary.Contains("upload"))

{

operation.consumes.Add("application/form-data")

operation.parameters.Add(new Parameter

{

name = "file",

@in = "formData",

required = true,

type = "file"

})

}

}

}

}

在 SwaggerConfig.cs 的 EnableSwagger 配置匿名方法类添加一行注册代码

c.OperationFilter<UploadFilter>()

API 文档展示效果


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/7981828.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-12
下一篇 2023-04-12

发表评论

登录后才能评论

评论列表(0条)

保存